容器工具生成属性

可通过设置 MSBuild 用于生成项目的属性来自定义 Visual Studio 生成容器项目的方式。 例如,可以更改 Dockerfile 的名称,指定映像的标记和标签,提供传递给 Docker 命令的其他参数,并控制 Visual Studio 是否执行某些性能优化,如在容器环境外生成。 还可以设置调试属性(如要启动的可执行文件的名称),以及要提供的命令行参数。

若要设置属性的值,请编辑项目文件。 例如,假设 Dockerfile 名为 MyDockerfile 。 可在项目文件中设置 DockerfileFile 属性,如下所示。

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

可以向现有 PropertyGroup 元素添加属性设置,如果没有,则新建一个 PropertyGroup 元素。

.NET SDK 项目的属性

本部分介绍在选择 .NET SDK 容器生成类型时应用的 MSBuild 属性。

.NET SDK 容器化项目所需的项目文件中只有一个属性,即 EnableSdkContainerDebugging。 必须将其设置为 True,这样 .NET SDK 项目才能启用调试功能。

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

Dockerfile 项目的属性

本部分介绍在选择 Dockerfile 容器生成类型时应用的 MSBuild 属性。

下表显示了可用于 Dockerfile 项目的 MSBuild 属性。 NuGet 包版本应用于 Microsoft.VisualStudio.Azure.Containers.Tools.Targets

属性名称 说明 默认值 NuGet 包版本
ContainerDevelopmentMode 控制是否启用“build-on-host”优化(“快速模式”调试)。 允许的值为“快速”和“常规” 。 快速 1.0.1872750 或更高版本
ContainerVsDbgPath VSDBG 调试器的路径。 %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 或更高版本
DockerDebuggeeArguments 调试时,指示调试器将这些参数传递给已启动的可执行文件。 不适用于 ASP.NET .NET Framework 项目 1.7.8 或更高版本
DockerDebuggeeProgram 调试时,指示调试器启动此可执行文件。 对于 .NET Core 和 .NET 5 及更高版本项目:dotnet,ASP.NET .NET Framework 项目:不适用(始终使用 IIS) 1.7.8 或更高版本
DockerDebuggeeKillProgram 此命令用于在容器中终止正在运行的进程。 不适用于 ASP.NET .NET Framework 项目 1.7.8 或更高版本
DockerDebuggeeWorkingDirectory 调试时,指示调试器使用此路径作为工作目录。 C:\app (Windows) 或 /app (Linux) 1.7.8 或更高版本
DockerDefaultTargetOS 生成 Docker 映像时使用的默认目标操作系统。 由 Visual Studio 设置。 1.0.1985401 或更高版本
DockerImageLabels 应用于 Docker 映像的默认标签集。 com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 或更高版本
DockerFastModeProjectMountDirectory 在“快速模式”中,此属性控制将项目输出目录批量安装到运行容器的位置 。 C:\app (Windows) 或 /app (Linux) 1.9.2 或更高版本
DockerfileBuildArguments 传递给 Docker build 命令的其他参数。 不适用。 1.0.1872750 或更高版本
DockerfileContext 生成 Docker 映像时使用的默认上下文,作为相对于 Dockerfile 的路径。 在将 Docker 支持添加到项目时由 Visual Studio 设置。 在 .NET Framework 项目中,设置为“.”(项目文件夹),在 .NET Core 和 .NET 5 及更高版本中,它设置为解决方案文件夹(通常为“..”)的相对路径。 1.0.1872750 或更高版本
DockerfileFastModeStage 在调试模式下生成图像时要使用的 Dockerfile 阶段(即目标)。 Dockerfile 中发现的第一个阶段(通常为基本阶段)
DockerfileFile 描述用于生成/运行项目容器的默认 Dockerfile。 此值可以是路径。 Dockerfile 1.0.1872750 或更高版本
DockerfileRunArguments 传递给 Docker run 命令的其他参数。 不适用。 1.0.1872750 或更高版本
DockerfileRunEnvironmentFiles Docker 运行过程中应用的以分号分隔的环境文件列表。 不适用。 1.0.1872750 或更高版本
DockerfileTag 生成 Docker 映像时要使用的标记。 在调试过程中,将“:dev”追加到标记中。 使用以下规则去除非字母数字字符后的程序集名称:
如果生成的标记全部为数值,则将“image”作为前缀插入(例如 image2314)
如果生成的标记为空字符串,则将“image”用作标记。
1.0.1872750 或更高版本

示例

以下项目文件显示了以上部分设置的示例。

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UserSecretsId>feae72bf-2368-4487-b6c6-546c19338cb1</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.10.6" />
  </ItemGroup>

</Project>

注意

在 Visual Studio 中,对于面向 .NET Core(包括 .NET 5 及更高版本)的项目,可以通过提供 DockerfileContext 的值进行设置的 Docker 上下文通常与 docker build 从命令行运行时所使用的上下文不同。 若要确保可以包含解决方案级别的生成工件,必须偏离 docker build 的行为。

调用 docker build 时,始终指定生成上下文,并且可以选择指定 Dockerfile 的路径。 默认情况下,Dockerfile 位于上下文的根目录中,但你可以使用 -f 标志指定一个备用位置。 例如,可以使用项目目录中的 docker build -f Dockerfile .. 或解决方案目录中的 docker build -f ProjectName/Dockerfile . 进行生成。

后续步骤

有关 MSBuild 属性的一般信息,请参阅 MSBuild 属性

请参阅

Docker Compose 生成属性

容器工具启动设置

MSBuild 保留属性和已知属性