Partager via


Propriétés de build d’Outils de conteneur

Vous pouvez personnaliser la façon dont Visual Studio génère vos projets de conteneur en définissant les propriétés que MSBuild utilise pour générer votre projet. Par exemple, vous pouvez modifier le nom du fichier Dockerfile, spécifier des étiquettes et des étiquettes pour vos images, fournir des arguments supplémentaires passés aux commandes Docker et contrôler si Visual Studio effectue certaines optimisations de performances telles que la génération en dehors de l’environnement de conteneur. Vous pouvez également définir des propriétés de débogage telles que le nom de l’exécutable à lancer et les arguments de ligne de commande à fournir.

Pour définir la valeur d’une propriété, modifiez le fichier projet. Par exemple, supposons que votre fichier Dockerfile soit nommé MyDockerfile. Vous pouvez définir la DockerfilePath propriété dans le fichier projet comme suit.

<PropertyGroup>
   <DockerfilePath>MyDockerfile</DockerfilePath>
</PropertyGroup>

Note

La propriété remplace la propriété DockerfilePathDockerfileFiledéconseillée, qui est toujours prise en charge dans la version actuelle de Visual Studio.

Pour définir la valeur d’une propriété, modifiez le fichier projet. Par exemple, supposons que votre fichier Dockerfile soit nommé MyDockerfile. Vous pouvez définir la DockerfileFile propriété dans le fichier projet comme suit.

<PropertyGroup>
   <DockerfileFile>MyDockerfile</DockerfileFile>
</PropertyGroup>

Vous pouvez ajouter le paramètre de propriété à un élément existant PropertyGroup ou, s’il n’en existe pas, créer un PropertyGroup nouvel élément.

Propriétés des projets sdk .NET

Cette section décrit les propriétés MSBuild qui s’appliquent lorsque vous choisissez le type de build du conteneur du Kit de développement logiciel (SDK) .NET.

Il n’existe qu’une seule propriété, EnableSdkContainerDebuggingdans le fichier projet qui est nécessaire pour les projets conteneurisés du Kit de développement logiciel (SDK) .NET. Il doit être défini True sur pour les projets du Kit de développement logiciel (SDK) .NET pour activer le débogage.

<PropertyGroup>
   <EnableSdkContainerDebugging>True</EnableSdkContainerDebugging>
</PropertyGroup>

Propriétés des projets Dockerfile

Cette section décrit les propriétés MSBuild qui s’appliquent lorsque vous choisissez le type de build du conteneur Dockerfile.

Le tableau suivant présente les propriétés MSBuild disponibles pour les projets Dockerfile. La version du package NuGet s’applique à Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Nom de la propriété Descriptif Valeur par défaut Version du package NuGet
ContainerDevelopmentMode Contrôle si l’optimisation « build-on-host » (« Mode rapide » débogage) est activée. Les valeurs autorisées sont Fast et Regular. Rapide 1.0.1872750 ou version ultérieure
ContainerVsDbgPath Chemin du débogueur VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 ou version ultérieure
DockerDebuggeeArguments Lors du débogage, le débogueur est invité à transmettre ces arguments au fichier exécutable lancé. Non applicable aux projets .NET Framework ASP.NET 1.7.8 ou version ultérieure
DockerDebuggeeProgram Lors du débogage, le débogueur est invité à lancer cet exécutable. Pour les projets .NET Core et .NET 5 et versions ultérieures : dotnet, ASP.NET projets .NET Framework : Non applicable (INTERNET Information Services (IIS) est toujours utilisé) 1.7.8 ou version ultérieure
DockerDebuggeeKillProgram Cette commande est utilisée pour tuer le processus en cours d’exécution dans un conteneur. Non applicable aux projets .NET Framework ASP.NET 1.7.8 ou version ultérieure
DockerDebuggeeWorkingDirectory Lors du débogage, le débogueur est invité à utiliser ce chemin comme répertoire de travail. C :\app (Windows) ou /app (Linux) 1.7.8 ou version ultérieure
DockerDefaultTargetOS Système d’exploitation cible par défaut utilisé lors de la génération de l’image Docker. Défini par Visual Studio. 1.0.1985401 ou version ultérieure
DockerImageLabels Ensemble par défaut d’étiquettes appliqué à l’image Docker. com.microsoft.created-by=visual-studio ; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 ou version ultérieure
DockerFastModeProjectMountDirectory En mode rapide, cette propriété contrôle l’emplacement où le répertoire de sortie du projet est monté en volume dans le conteneur en cours d’exécution. C :\app (Windows) ou /app (Linux) 1.9.2 ou version ultérieure
DockerfileBuildArguments Arguments supplémentaires passés à la commande de build Docker . Non applicable. 1.0.1872750 ou version ultérieure
DockerfileContext Contexte par défaut utilisé lors de la génération de l’image Docker, en tant que chemin d’accès relatif au fichier Dockerfile. Défini par Visual Studio lorsque la prise en charge de Docker est ajoutée à un projet. Dans les projets .NET Framework, affectez la valeur « ». (le dossier du projet), et dans les projets .NET Core et .NET 5 et versions ultérieures, il est défini sur le chemin relatif du dossier de solution (généralement « . »). 1.0.1872750 ou version ultérieure
DockerfileFastModeStage Étape dockerfile (autrement dit, cible) à utiliser lors de la génération de l’image en mode débogage. Première étape trouvée dans le fichier Dockerfile (généralement de base) -
DockerfileFile Décrit le fichier Dockerfile par défaut à utiliser pour générer/exécuter le conteneur du projet. Cette valeur peut être un chemin d’accès. Dockerfile 1.0.1872750 ou version ultérieure
DockerfileRunArguments Arguments supplémentaires passés à la commande Docker Run . Non applicable. 1.0.1872750 ou version ultérieure
DockerfileRunEnvironmentFiles Liste délimitée par des points-virgules des fichiers d’environnement appliqués pendant l’exécution de Docker. Non applicable. 1.0.1872750 ou version ultérieure
DockerfileTag Balise à utiliser lors de la génération de l’image Docker. Dans le débogage, un « :d ev » est ajouté à la balise. Nom de l’assembly après suppression de caractères nonphanumériques avec les règles suivantes :
Si la balise résultante est numérique, « image » est insérée en tant que préfixe (par exemple, image2314)
Si la balise résultante est une chaîne vide, « image » est utilisée comme balise.
1.0.1872750 ou version ultérieure

Le tableau suivant présente les propriétés MSBuild disponibles pour les projets Dockerfile. La version du package NuGet s’applique à Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Certaines des propriétés et listes d’éléments du tableau suivant sont des remplacements équivalents pour les propriétés obsolètes. Dans ce cas, la propriété obsolète qu’elle remplace est également nommée. Nous vous recommandons de mettre à jour des projets pour utiliser les propriétés actuellement prises en charge. La prise en charge des propriétés obsolètes peut être supprimée dans une prochaine mise à jour de Visual Studio.

Certaines propriétés répertoriées comme obsolètes sont remplacées par des valeurs équivalentes dans launchsettings.json, et l’une est remplacée par la liste d’éléments MSBuild.

Nom de la propriété Descriptif Valeur par défaut Version minimale du package NuGet
ContainerDevelopmentMode Contrôle si l’optimisation « build-on-host » (« Mode rapide » débogage) est activée. Les valeurs autorisées sont Fast et Regular. Rapide 1.0.1872750
ContainerVsDbgPath Chemin du débogueur VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(remplace )DockerImageLabels
Ensemble par défaut d’étiquettes appliqué à l’image Docker.

ContainerLabel est une liste d’éléments MSBuild, et non une propriété.
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 pour ContainerLabel

1.5.4 pour DockerImageLabels
ContainerFastModeProjectMountDirectory

(remplace )DockerFastModeProjectMountDirectory
En mode rapide, cette propriété contrôle l’emplacement où le répertoire de sortie du projet est monté en volume dans le conteneur en cours d’exécution. C :\app (Windows) ou /app (Linux) 1.23.0 pour ContainerFastModeProjectMountDirectory

1.9.2 pour DockerFastModeProjectMountDirectory
ContainerBuildArguments

(remplace )DockerfileBuildArguments
Arguments supplémentaires passés à la commande de génération de conteneur. Consultez la build Docker ou la build podman. Non applicable. 1.23.0 pour ContainerBuildArguements

1.0.1872750 pour DockerfileBuildArguments
ContainerBuildContext

(remplace )DockerfileContext
Contexte par défaut utilisé lors de la génération de l’image Docker, en tant que chemin d’accès relatif au fichier Dockerfile. Défini par Visual Studio lorsque la prise en charge de Docker est ajoutée à un projet. Il est défini sur le chemin d’accès relatif au dossier de la solution (généralement « . »). 1.23.0 pour ContainerBuildContext

1.0.1872750 pour DockerfileContext
ContainerFastModeStage

(remplace )DockerfileFastModeStage
Étape dockerfile (autrement dit, cible) à utiliser lors de la génération de l’image en mode débogage. Première étape trouvée dans le fichier Dockerfile (généralement de base) -
ContainerIncludeDefaultImageLabels (remplace : DockerIncludeDefaultImageLabels) Si la valeur est définie false, n’inclut pas les balises com.microsoft.created-by=visual-studio d’image par défaut et com.microsoft.visual-studio.project-name=$(MSBuildProjectName). Vrai 1.23.0 pour ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages(remplace )DockerLabelBuiltImages Inclure des étiquettes sur des images générées. Si la valeur est false, aucune étiquette n’est ajoutée, y compris les étiquettes définies par l’utilisateur. Vrai 1.23.0 pour ContainerLabelBuiltImages
DockerfilePath

(remplace )DockerfileFile
Décrit le fichier Dockerfile par défaut à utiliser pour générer/exécuter le conteneur du projet. Dockerfile 1.23.0 pour DockerfilePath

1.0.1872750 pour DockerfileFile
ContainerRepository

(remplace )DockerRepository
Référentiel à utiliser dans l’étiquette, par exemple webapplication1 dans l’étiquette webapplication1:dev. Nom de l’assembly. 1.23.0 pour ContainerRepository
ContainerImageTag ou ContainerImageTags

(remplace )DockerfileTag
Balise à utiliser lors de la génération de l’image. Dans le débogage, un « :d ev » est ajouté à la balise. Nom de l’assembly après suppression de caractères nonphanumériques avec les règles suivantes :
Si la balise résultante est numérique, « image » est insérée en tant que préfixe (par exemple, image2314)
Si la balise résultante est une chaîne vide, « image » est utilisée comme balise.
1.23.0 pour ContainerImageTag, ContainerImageTags

1.0.1872750 pour DockerfileTag.
DockerDebuggeeArguments

(obsolète, utilisation commandLineArgs dans launchsettings.json)
Lors du débogage, le débogueur est invité à transmettre ces arguments au fichier exécutable lancé. - 1.7.8
DockerDebuggeeProgram

(obsolète, utilisation executablePath dans launchsettings.json)
Lors du débogage, le débogueur est invité à lancer cet exécutable. - 1.7.8
DockerDebuggeeKillProgram Cette commande est utilisée pour tuer le processus en cours d’exécution dans un conteneur. - 1.7.8
DockerDebuggeeWorkingDirectory

(obsolète ; utilisation workingDirectory dans launchsettings.json)
Lors du débogage, le débogueur est invité à utiliser ce chemin comme répertoire de travail. C :\app (Windows) ou /app (Linux) 1.7.8
DockerDefaultTargetOS Système d’exploitation cible par défaut utilisé lors de la génération de l’image Docker. Défini par Visual Studio. 1.0.1985401
DockerfileRunArguments

(obsolète, utilisation containerRunArguments dans launchsettings.json)
Arguments supplémentaires passés à la commande Docker Run . Non applicable. 1.0.1872750
DockerfileRunEnvironmentFiles

(obsolète, utilisation containerRunEnvironmentFiles dans launchsettings.json)
Liste délimitée par des points-virgules des fichiers d’environnement appliqués pendant l’exécution de Docker. Non applicable. 1.0.1872750

ContainerRepositoryet ContainerImageTag (ouContainerImageTags) permettent de spécifier les deux parties d’une étiquette d’image, le référentiel et une ou plusieurs balises (par exemple). webapp1:alpha Dans les versions précédentes de Visual Studio, vous pouvez utiliser la DockerfileTag propriété pour spécifier le référentiel et une seule balise, mais cela avait des limitations, par exemple, il n’y avait aucune possibilité de spécifier plusieurs balises. La propriété DockerfileTag est obsolète ; les projets doivent désormais utiliser ContainerRepository et ContainerImageTag, et la version actuelle prend également en charge ContainerImageTags plusieurs balises.

Dans les versions précédentes de Visual Studio, la syntaxe était <DockerfileTag>webapp1:alpha</DockerfileTag>. L’équivalent actuel est <ContainerRepository>webapp1</ContainerRespository> et <ContainerImageTag>alpha</ContainerImageTag>, ou <ContainerImageTags>alpha;latest</ContainerImageTags> si vous souhaitez plusieurs balises.

Example

Le fichier projet suivant présente des exemples de certains de ces paramètres.

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8c7ab9a5-d578-4c40-8b6d-54d174002229</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <!-- By default, Visual Studio uses the folder above the Dockerfile.
         The path is relative to the Dockerfile, so here the context is
         set to the same folder as the Dockerfile. -->
    <ContainerBuildContext>.</ContainerBuildContext>
    <!-- Set `docker run` arguments to mount a volume -->
    <DockerfileRunArguments>-v $(MSBuildProjectDirectory)/host-folder:/container-folder:ro</DockerfileRunArguments>
    <!-- Set `docker build` arguments to add a custom tag -->
    <ContainerBuildArguments>-t contoso/front-end:v2.0</ContainerBuildArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
  </ItemGroup>

</Project>

Note

Le contexte de génération, que vous pouvez définir en fournissant une valeur pour ContainerBuildContext (ou DockerfileContext), est généralement différent dans Visual Studio pour les projets de ce que docker build (ou podman build) utilise lorsque vous l’exécutez à partir de la ligne de commande. Le départ du comportement de la ligne de commande de build est nécessaire pour vous assurer que les artefacts de build au niveau de la solution peuvent être inclus.

Lorsque vous appelez docker build (ou podman build), vous spécifiez toujours un contexte de build et vous pouvez éventuellement spécifier un chemin d’accès au fichier Dockerfile. La valeur par défaut est que le fichier Dockerfile se trouve à la racine du contexte, mais vous pouvez utiliser l’indicateur -f pour spécifier un autre emplacement. Par exemple, vous pouvez générer à docker build -f Dockerfile .. partir du répertoire du projet ou docker build -f ProjectName/Dockerfile . à partir du répertoire de solution.

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8c7ab9a5-d578-4c40-8b6d-54d174002229</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <!-- In CI/CD scenarios, you might need to change the context. By default, Visual Studio uses the
         folder above the Dockerfile. The path is relative to the Dockerfile, so here the context is
         set to the same folder as the Dockerfile. -->
    <DockerfileContext>.</DockerfileContext>
    <!-- Set `docker run` arguments to mount a volume -->
    <DockerfileRunArguments>-v $(MSBuildProjectDirectory)/host-folder:/container-folder:ro</DockerfileRunArguments>
    <!-- Set `docker build` arguments to add a custom tag -->
    <DockerfileBuildArguments>-t contoso/front-end:v2.0</DockerfileBuildArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
  </ItemGroup>

</Project>

Note

Le contexte Docker, que vous pouvez définir en fournissant une valeur pour DockerfileContext, est généralement différent dans Visual Studio pour les projets ciblant .NET Core (y compris .NET 5 et versions ultérieures) par rapport à ce qui docker build utilise lorsque vous l’exécutez à partir de la ligne de commande. Le départ du comportement est docker build nécessaire pour vous assurer que les artefacts de build au niveau de la solution peuvent être inclus.

Lorsque vous appelez docker build, vous spécifiez toujours un contexte de build et vous pouvez éventuellement spécifier un chemin d’accès au fichier Dockerfile. La valeur par défaut est que le fichier Dockerfile se trouve à la racine du contexte, mais vous pouvez utiliser l’indicateur -f pour spécifier un autre emplacement. Par exemple, vous pouvez générer à docker build -f Dockerfile .. partir du répertoire du projet ou docker build -f ProjectName/Dockerfile . à partir du répertoire de solution.

Étapes suivantes

Pour plus d’informations sur les propriétés MSBuild en général, consultez propriétés MSBuild.

Voir aussi

Propriétés de build Docker Compose

Paramètres de lancement des outils de conteneur

propriétés réservées msBuild et connues