Propiedades de compilación de las herramientas de contenedor
Puede personalizar el modo en que Visual Studio compila los proyectos de contenedor estableciendo las propiedades que MSBuild usa para compilar el proyecto. Por ejemplo, puede cambiar el nombre del archivo Dockerfile, especificar etiquetas para las imágenes, proporcionar argumentos adicionales pasados a los comandos de Docker y controlar si Visual Studio realiza ciertas optimizaciones de rendimiento, como la creación fuera del entorno de contenedor. También puede establecer propiedades de depuración, como el nombre del archivo 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 del proyecto. Por ejemplo, supongamos que el archivo Dockerfile se denomina MyDockerfile. Puede establecer la propiedad DockerfileFile
en el archivo del proyecto como se indica a continuación.
<PropertyGroup>
<DockerfileFile>MyDockerfile</DockerfileFile>
</PropertyGroup>
Puede agregar el valor de la propiedad a un elemento PropertyGroup
existente o, si no hay ninguno, crear un nuevo elemento PropertyGroup
.
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 de Dockerfile.
En la tabla siguiente se muestran las propiedades de MSBuild disponibles para proyectos de Dockerfile. La versión del paquete NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.
Nombre de la propiedad | Descripción | Valor predeterminado | Versión del paquete NuGet |
---|---|---|---|
ContainerDevelopmentMode | Controla si la optimización de "compilación en host" (depuración en "modo rápido") está habilitada. Los valores permitidos son Rápido y Normal. | Rápido | 1.0.1872750 o más reciente |
ContainerVsDbgPath | La ruta de acceso para el depurador de VSDBG. | %USERPROFILE%\vsdbg\vs2017u5 |
1.0.1985401 o más reciente |
DockerDebuggeeArguments | Durante la depuración, se indica al depurador que pase estos argumentos al ejecutable iniciado. | No aplicable a proyectos de .NET Framework de ASP.NET | 1.7.8 o más reciente |
DockerDebuggeeProgram | Durante la depuración, se indica al depurador que inicie este archivo 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 más reciente |
DockerDebuggeeKillProgram | Este comando se usa para terminar el proceso en ejecución en un contenedor. | No aplicable a proyectos de .NET Framework de ASP.NET | 1.7.8 o más reciente |
DockerDebuggeeWorkingDirectory | Durante la depuración, se indica al depurador que use esta ruta de acceso como directorio de trabajo. | C:\app (Windows) o /app (Linux) | 1.7.8 o más reciente |
DockerDefaultTargetOS | El sistema operativo de destino predeterminado que se usa al compilar la imagen de Docker. | Establecido por Visual Studio. | 1.0.1985401 o más reciente |
DockerImageLabels | El 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 más reciente |
DockerFastModeProjectMountDirectory | En el modo rápido, esta propiedad controla dónde se monta el volumen del directorio de salida del proyecto en el contenedor en ejecución. | C:\app (Windows) o /app (Linux) | 1.9.2 o más reciente |
DockerfileBuildArguments | Argumentos adicionales pasados al comando de compilación de Docker. | No es aplicable. | 1.0.1872750 o más reciente |
DockerfileContext | Contexto predeterminado que se usa al compilar la imagen de Docker, como una ruta de acceso relativa a Dockerfile. | Lo establece Visual Studio cuando se agrega compatibilidad con Docker a un proyecto. En proyectos de .NET Framework, se establece en "." (carpeta del proyecto); en 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 más reciente |
DockerfileFastModeStage | La fase de Dockerfile (es decir, el 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 archivo Dockerfile predeterminado que debe usarse para compilar o ejecutar el contenedor del proyecto. Este valor puede ser una ruta de acceso. | Dockerfile | 1.0.1872750 o más reciente |
DockerfileRunArguments | Argumentos adicionales pasados al comando de ejecución de Docker. | No es aplicable. | 1.0.1872750 o más reciente |
DockerfileRunEnvironmentFiles | Lista delimitada por punto y coma de archivos de entorno aplicada durante la ejecución de Docker. | No es aplicable. | 1.0.1872750 o más reciente |
DockerfileTag | Etiqueta que debe usarse al compilar la imagen de Docker. En la depuración, se anexa un ":dev" a la etiqueta. | Nombre del ensamblado después de quitar los caracteres no alfanuméricos con las siguientes reglas: Si la etiqueta resultante es numérica, "Image" se inserta como prefijo (por ejemplo, image2314) Si la etiqueta resultante es una cadena vacía, se usa "Image" como etiqueta. |
1.0.1872750 o más reciente |
Ejemplo
El siguiente archivo de proyecto contiene ejemplos de algunos de estos valores.
<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) a partir del cual se usa docker build
al ejecutarlo desde la línea de comandos. La salida del comportamiento de docker build
es necesaria para asegurarse de 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 marca -f
para especificar una ubicación alternativa. Por ejemplo, puede compilar con docker build -f Dockerfile ..
desde el directorio del proyecto o con docker build -f ProjectName/Dockerfile .
desde el directorio de la solución.
Pasos siguientes
Para obtener información sobre las propiedades de MSBuild en general, vea Propiedades de MSBuild.
Vea también
Propiedades de compilación de Docker Compose