Compartir a través de


Propiedades de compilación de Las herramientas de contenedor

Puede personalizar cómo Visual Studio compila los proyectos de contenedor estableciendo las propiedades que USA MSBuild para compilar el proyecto. Por ejemplo, puede cambiar el nombre del Dockerfile, especificar etiquetas y etiquetas para las imágenes, proporcionar argumentos adicionales pasados a comandos de Docker y controlar si Visual Studio realiza determinadas optimizaciones de rendimiento, como la creación fuera del entorno de contenedor. También puede establecer propiedades de depuración como el nombre del ejecutable que se va a iniciar y los argumentos de la línea de comandos que se van a proporcionar.

Para establecer el valor de una propiedad, edite el archivo de proyecto. Por ejemplo, supongamos que el Dockerfile se denomina MyDockerfile. Puede establecer la DockerfilePath propiedad en el archivo del proyecto como se indica a continuación.

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

Nota:

La propiedad DockerfilePath reemplaza a la propiedad en desuso DockerfileFile, que todavía se admite en la versión actual de Visual Studio.

Para establecer el valor de una propiedad, edite el archivo de proyecto. Por ejemplo, supongamos que el Dockerfile se denomina MyDockerfile. Puede establecer la DockerfileFile propiedad en el archivo del proyecto como se indica a continuación.

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

Puede agregar el valor de propiedad a un elemento existente PropertyGroup o, si no hay uno, crear un nuevo PropertyGroup elemento.

Propiedades para proyectos del SDK de .NET

En esta sección se describen las propiedades de MSBuild que se aplican al elegir el tipo de compilación de contenedor del SDK de .NET.

Solo hay una propiedad, EnableSdkContainerDebugging, en el archivo de proyecto que se necesita para los proyectos contenedorizados del SDK de .NET. Debe establecerse en True para que los proyectos del SDK de .NET habiliten la depuración.

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

Propiedades para proyectos de Dockerfile

En esta sección se describen las propiedades de MSBuild que se aplican al elegir el tipo de compilación de contenedor dockerfile.

En la tabla siguiente se muestran las propiedades de MSBuild disponibles para los proyectos de Dockerfile. La versión del paquete NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Nombre de propiedad Description Valor predeterminado Versión del paquete NuGet
ContainerDevelopmentMode Controla si la optimización de "compilación en host" (depuración "Modo rápido") está habilitada. Los valores permitidos son Fast y Regular. Rápido 1.0.1872750 o posterior
ContainerVsDbgPath Ruta de acceso del depurador de VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 o posterior
DockerDebuggeeArguments Al depurar, se indica al depurador que pase estos argumentos al ejecutable iniciado. No es aplicable a los proyectos de .NET Framework de ASP.NET 1.7.8 o posterior
DockerDebuggeeProgram Al depurar, se indica al depurador que inicie este ejecutable. Para proyectos de .NET Core y .NET 5 y versiones posteriores: dotnet, ASP.NET proyectos de .NET Framework: no aplicable (Internet Information Services (IIS) siempre se usa) 1.7.8 o posterior
DockerDebuggeeKillProgram Este comando se usa para eliminar el proceso en ejecución en un contenedor. No es aplicable a los proyectos de .NET Framework de ASP.NET 1.7.8 o posterior
DockerDebuggeeWorkingDirectory Al depurar, se indica al depurador que use esta ruta de acceso como directorio de trabajo. C:\app (Windows) o /app (Linux) 1.7.8 o posterior
DockerDefaultTargetOS Sistema operativo de destino predeterminado que se usa al compilar la imagen de Docker. Establecido por Visual Studio. 1.0.1985401 o posterior
DockerImageLabels Conjunto predeterminado de etiquetas aplicadas a la imagen de Docker. com.microsoft.created-by=visual-studio; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 o posterior
DockerFastModeProjectMountDirectory En modo rápido, esta propiedad controla dónde se monta el directorio de salida del proyecto en el contenedor en ejecución. C:\app (Windows) o /app (Linux) 1.9.2 o posterior
DockerfileBuildArguments Argumentos adicionales pasados al comando de compilación de Docker . No aplicable. 1.0.1872750 o posterior
DockerfileContext Contexto predeterminado que se usa al compilar la imagen de Docker, como una ruta de acceso relativa al Dockerfile. Se establece mediante Visual Studio cuando se agrega compatibilidad con Docker a un proyecto. En proyectos de .NET Framework, establezca en "." (la carpeta del proyecto) y en los proyectos de .NET Core y .NET 5 y versiones posteriores, se establece en la ruta de acceso relativa a la carpeta de la solución (normalmente ".."). 1.0.1872750 o posterior
DockerfileFastModeStage Fase dockerfile (es decir, destino) que se va a usar al compilar la imagen en modo de depuración. Primera fase que se encuentra en el Dockerfile (normalmente base) -
DockerfileFile Describe el Dockerfile predeterminado que se va a usar para compilar o ejecutar el contenedor para el proyecto. Este valor puede ser una ruta de acceso. Dockerfile 1.0.1872750 o posterior
DockerfileRunArguments Argumentos adicionales pasados al comando Docker run . No aplicable. 1.0.1872750 o posterior
DockerfileRunEnvironmentFiles Lista delimitada por punto y coma de archivos de entorno aplicados durante la ejecución de Docker. No aplicable. 1.0.1872750 o posterior
DockerfileTag Etiqueta que se va a usar al compilar la imagen de Docker. En la depuración, se anexa un ":d ev" a la etiqueta . Nombre del ensamblado después de quitar caracteres nonalphanumeric con las siguientes reglas:
Si la etiqueta resultante es numérica, se inserta "image" como prefijo (por ejemplo, image2314)
Si la etiqueta resultante es una cadena vacía, se usa "image" como etiqueta.
1.0.1872750 o posterior

En la tabla siguiente se muestran las propiedades de MSBuild disponibles para los proyectos de Dockerfile. La versión del paquete NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Algunas de las propiedades y listas de elementos de la tabla siguiente son reemplazos equivalentes para las propiedades obsoletas. En ese caso, la propiedad obsoleta que reemplaza también se denomina . Se recomienda actualizar proyectos para usar las propiedades admitidas actualmente. Es posible que la compatibilidad con propiedades obsoletas se quite en una actualización futura de Visual Studio.

Algunas propiedades enumeradas como obsoletas se reemplazan por valores equivalentes en launchsettings.json, y uno se reemplaza por la lista de elementos de MSBuild.

Nombre de propiedad Description Valor predeterminado Versión mínima del paquete NuGet
ContainerDevelopmentMode Controla si la optimización de "compilación en host" (depuración "Modo rápido") está habilitada. Los valores permitidos son Fast y Regular. Rápido 1.0.1872750
ContainerVsDbgPath Ruta de acceso del depurador de VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(reemplaza DockerImageLabels)
Conjunto predeterminado de etiquetas aplicadas a la imagen de Docker.

ContainerLabel es una lista de elementos de MSBuild, no una propiedad .
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 para ContainerLabel

1.5.4 para DockerImageLabels
ContainerFastModeProjectMountDirectory

(reemplaza DockerFastModeProjectMountDirectory)
En modo rápido, esta propiedad controla dónde se monta el directorio de salida del proyecto en el contenedor en ejecución. C:\app (Windows) o /app (Linux) 1.23.0 para ContainerFastModeProjectMountDirectory

1.9.2 para DockerFastModeProjectMountDirectory
ContainerBuildArguments

(reemplaza DockerfileBuildArguments)
Argumentos adicionales pasados al comando de compilación del contenedor. Consulte Compilación de Docker o compilación de podman. No aplicable. 1.23.0 para ContainerBuildArguements

1.0.1872750 para DockerfileBuildArguments
ContainerBuildContext

(reemplaza DockerfileContext)
Contexto predeterminado que se usa al compilar la imagen de Docker, como una ruta de acceso relativa al Dockerfile. Se establece mediante Visual Studio cuando se agrega compatibilidad con Docker a un proyecto. Se establece en la ruta de acceso relativa a la carpeta de la solución (normalmente ".."). 1.23.0 para ContainerBuildContext

1.0.1872750 para DockerfileContext
ContainerFastModeStage

(reemplaza DockerfileFastModeStage)
Fase dockerfile (es decir, destino) que se va a usar al compilar la imagen en modo de depuración. Primera fase que se encuentra en el Dockerfile (normalmente base) -
ContainerIncludeDefaultImageLabels (reemplaza: DockerIncludeDefaultImageLabels) Si se establece en false, no incluye etiquetas de imagen predeterminadas com.microsoft.created-by=visual-studio y com.microsoft.visual-studio.project-name=$(MSBuildProjectName). Cierto 1.23.0 para ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages (reemplaza DockerLabelBuiltImages) Incluya etiquetas en imágenes compiladas. Si es false, no se agregan etiquetas, incluidas las etiquetas definidas por el usuario. Cierto 1.23.0 para ContainerLabelBuiltImages
DockerfilePath

(reemplaza DockerfileFile)
Describe el Dockerfile predeterminado que se va a usar para compilar o ejecutar el contenedor para el proyecto. Dockerfile 1.23.0 para DockerfilePath

1.0.1872750 para DockerfileFile
ContainerRepository

(reemplaza DockerRepository)
Repositorio que se va a usar en la etiqueta, por ejemplo webapplication1 , en la etiqueta webapplication1:dev. Nombre del ensamblado. 1.23.0 para ContainerRepository
ContainerImageTag o ContainerImageTags

(reemplaza DockerfileTag)
Etiqueta que se va a usar al compilar la imagen. En la depuración, se anexa un ":d ev" a la etiqueta . Nombre del ensamblado después de quitar caracteres nonalphanumeric con las siguientes reglas:
Si la etiqueta resultante es numérica, se inserta "image" como prefijo (por ejemplo, image2314)
Si la etiqueta resultante es una cadena vacía, se usa "image" como etiqueta.
1.23.0 para ContainerImageTag, ContainerImageTags

1.0.1872750 para DockerfileTag.
DockerDebuggeeArguments

(obsoleto, use commandLineArgs en launchsettings.json)
Al depurar, se indica al depurador que pase estos argumentos al ejecutable iniciado. - 1.7.8
DockerDebuggeeProgram

(obsoleto, use executablePath en launchsettings.json)
Al depurar, se indica al depurador que inicie este ejecutable. - 1.7.8
DockerDebuggeeKillProgram Este comando se usa para eliminar el proceso en ejecución en un contenedor. - 1.7.8
DockerDebuggeeWorkingDirectory

(obsoleto; use workingDirectory en launchsettings.json)
Al depurar, se indica al depurador que use esta ruta de acceso como directorio de trabajo. C:\app (Windows) o /app (Linux) 1.7.8
DockerDefaultTargetOS Sistema operativo de destino predeterminado que se usa al compilar la imagen de Docker. Establecido por Visual Studio. 1.0.1985401
DockerfileRunArguments

(obsoleto, use containerRunArguments en launchsettings.json)
Argumentos adicionales pasados al comando Docker run . No aplicable. 1.0.1872750
DockerfileRunEnvironmentFiles

(obsoleto, use containerRunEnvironmentFiles en launchsettings.json)
Lista delimitada por punto y coma de archivos de entorno aplicados durante la ejecución de Docker. No aplicable. 1.0.1872750

ContainerRepository y ContainerImageTag (o ContainerImageTags) proporcionan la capacidad de especificar las dos partes de una etiqueta de imagen, el repositorio y una o varias etiquetas (por ejemplo, webapp1:alpha). En versiones anteriores de Visual Studio, podría usar la DockerfileTag propiedad para especificar el repositorio y una sola etiqueta, pero esto tenía limitaciones, por ejemplo, no había capacidad para especificar varias etiquetas. La propiedad DockerfileTag está obsoleta; los proyectos ahora deben usar ContainerRepository y ContainerImageTag, y la versión actual también admite ContainerImageTags para varias etiquetas.

En versiones anteriores de Visual Studio, la sintaxis era <DockerfileTag>webapp1:alpha</DockerfileTag>. El equivalente actual es <ContainerRepository>webapp1</ContainerRespository> y <ContainerImageTag>alpha</ContainerImageTag>, o <ContainerImageTags>alpha;latest</ContainerImageTags> si desea varias etiquetas.

Example

En el siguiente archivo de proyecto se muestran ejemplos de algunas de estas opciones de configuración.

 <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>

Nota:

El contexto de compilación, que puede establecer proporcionando un valor para ContainerBuildContext (o DockerfileContext), suele ser diferente en Visual Studio para proyectos de lo que docker build (o podman build) usa al ejecutarlo desde la línea de comandos. La salida del comportamiento de la línea de comandos de compilación es necesaria para asegurarse de que se pueden incluir artefactos de compilación en el nivel de solución.

Cuando se llama docker build a (o podman build), siempre se especifica un contexto de compilación y, opcionalmente, se puede especificar una ruta de acceso al Dockerfile. El valor predeterminado es que el Dockerfile está en la raíz del contexto, pero puede usar la -f marca para especificar una ubicación alternativa. Por ejemplo, puede compilar con docker build -f Dockerfile .. desde el directorio del proyecto o docker build -f ProjectName/Dockerfile . desde el directorio de la solución.

 <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>

Nota:

El contexto de Docker, que puede establecer proporcionando un valor para DockerfileContext, suele ser diferente en Visual Studio para proyectos destinados a .NET Core (incluido .NET 5 y versiones posteriores) desde lo que docker build se usa al ejecutarlo desde la línea de comandos. La salida del comportamiento de es necesaria para asegurarse de docker build que se pueden incluir artefactos de compilación en el nivel de solución.

Cuando se llama a docker build, siempre se especifica un contexto de compilación y, opcionalmente, se puede especificar una ruta de acceso al Dockerfile. El valor predeterminado es que el Dockerfile está en la raíz del contexto, pero puede usar la -f marca para especificar una ubicación alternativa. Por ejemplo, puede compilar con docker build -f Dockerfile .. desde el directorio del proyecto o docker build -f ProjectName/Dockerfile . desde el directorio de la solución.

Pasos siguientes

Para obtener información sobre las propiedades de MSBuild generalmente, consulte Propiedades de MSBuild.

Consulte también

Propiedades de compilación de Docker Compose

Configuración de inicio de Las herramientas de contenedor

propiedades reservadas y conocidas de MSBuild