容器工具生成属性

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

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

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

注释

该属性 DockerfilePath 将替换已弃用的属性,该属性 DockerfileFile在当前版本的 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

属性名称 Description 默认值 NuGet 包版本
ContainerDevelopmentMode 控制是否启用了“生成主机”优化(“快速模式”调试)。 允许的值为 FastRegular 快速 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 项目:不适用(始终使用 Internet Information Services (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 生成 命令的其他参数。 不適用。 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 映像时要使用的标记。 在调试中,“:d ev”将追加到标记中。 使用以下规则剥离非字母字符后的程序集名称:
如果生成的标记全部为数值,则“image”将作为前缀插入(例如 image2314)
如果生成的标记是空字符串,则将“image”用作标记。
1.0.1872750 或更高版本

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

下表中的某些属性和项列表是过时属性的等效替换项。 在这种情况下,也会命名它替换的过时属性。 建议更新项目以使用当前支持的属性。 在 Visual Studio 的未来更新中,可能会删除对过时属性的支持。

列为过时的某些属性由 launchsettings.json中的等效值替换,一个属性由 MSBuild 项列表替换。

属性名称 Description 默认值 最低 NuGet 包版本
ContainerDevelopmentMode 控制是否启用了“生成主机”优化(“快速模式”调试)。 允许的值为 FastRegular 快速 1.0.1872750
ContainerVsDbgPath VSDBG 调试器的路径。 %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(替换 DockerImageLabels
应用于 Docker 映像的默认标签集。

ContainerLabel 是 MSBuild 项列表,而不是属性。
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 for ContainerLabel

1.5.4 for DockerImageLabels
ContainerFastModeProjectMountDirectory

(替换 DockerFastModeProjectMountDirectory
快速模式下,此属性控制将项目输出目录卷装载到正在运行的容器中的位置。 C:\app (Windows) 或 /app (Linux) 1.23.0 for ContainerFastModeProjectMountDirectory

1.9.2 for DockerFastModeProjectMountDirectory
ContainerBuildArguments

(替换 DockerfileBuildArguments
传递给容器生成命令的其他参数。 请参阅 Docker 生成Podman 生成 不適用。 1.23.0 for ContainerBuildArguements

1.0.1872750 DockerfileBuildArguments
ContainerBuildContext

(替换 DockerfileContext
生成 Docker 映像时使用的默认上下文,作为相对于 Dockerfile 的路径。 将 Docker 支持添加到项目时,由 Visual Studio 设置。 它设置为解决方案文件夹(通常为“..”)的相对路径。 1.23.0 for ContainerBuildContext

1.0.1872750 DockerfileContext
ContainerFastModeStage

(替换 DockerfileFastModeStage
在调试模式下生成映像时要使用的 Dockerfile 阶段(即目标)。 Dockerfile 中发现的第一个阶段(通常为基阶段) -
ContainerIncludeDefaultImageLabels(替换: DockerIncludeDefaultImageLabels 如果设置为 false,则不包括默认图像标记 com.microsoft.created-by=visual-studiocom.microsoft.visual-studio.project-name=$(MSBuildProjectName) True 1.23.0 for ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages (替换 DockerLabelBuiltImages 在生成的映像上包括标签。 如果为 false,则不添加任何标签,包括用户定义的标签。 True 1.23.0 for ContainerLabelBuiltImages
DockerfilePath

(替换 DockerfileFile
描述用于生成/运行项目容器的默认 Dockerfile。 Dockerfile 1.23.0 for DockerfilePath

1.0.1872750 DockerfileFile
ContainerRepository

(替换 DockerRepository
要用于标签的存储库,例如 webapplication1 标签 webapplication1:dev中的存储库。 程序集名称。 1.23.0 for ContainerRepository
ContainerImageTagContainerImageTags

(替换 DockerfileTag
生成映像时要使用的标记。 在调试中,“:d ev”将追加到标记中。 使用以下规则剥离非字母字符后的程序集名称:
如果生成的标记全部为数值,则“image”将作为前缀插入(例如 image2314)
如果生成的标记是空字符串,则将“image”用作标记。
1.23.0 for ContainerImageTagContainerImageTags

1.0.1872750 for DockerfileTag.
DockerDebuggeeArguments

(已过时,在 launchsettings.json中使用commandLineArgs
调试时,将指示调试器将这些参数传递给启动的可执行文件。 - 1.7.8
DockerDebuggeeProgram

(已过时,在 launchsettings.json中使用executablePath
调试时,将指示调试器启动此可执行文件。 - 1.7.8
DockerDebuggeeKillProgram 此命令用于终止容器中正在运行的进程。 - 1.7.8
DockerDebuggeeWorkingDirectory

(已过时;在 launchsettings.json中使用workingDirectory
调试时,将指示调试器将此路径用作工作目录。 C:\app (Windows) 或 /app (Linux) 1.7.8
DockerDefaultTargetOS 生成 Docker 映像时使用的默认目标作系统。 由 Visual Studio 设置。 1.0.1985401
DockerfileRunArguments

(已过时,在 launchsettings.json中使用containerRunArguments
传递给 Docker run 命令的其他参数。 不適用。 1.0.1872750
DockerfileRunEnvironmentFiles

(已过时,在 launchsettings.json中使用containerRunEnvironmentFiles
Docker 运行期间应用的环境文件的分号分隔列表。 不適用。 1.0.1872750

ContainerRepositoryContainerImageTag (或 ContainerImageTags) 提供指定映像标签的两个部分(例如 webapp1:alpha存储库和一个或多个标记)的功能。 在早期版本的 Visual Studio 中,可以使用 DockerfileTag 该属性来指定存储库和单个标记,但这有限制,例如,无法指定多个标记。 该属性 DockerfileTag 已过时;项目现在应使用 ContainerRepositoryContainerImageTag并且当前版本还支持 ContainerImageTags 多个标记。

在以前的 Visual Studio 版本中,语法为 <DockerfileTag>webapp1:alpha</DockerfileTag>. 当前等效项是<ContainerRepository>webapp1</ContainerRespository><ContainerImageTag>alpha</ContainerImageTag><ContainerImageTags>alpha;latest</ContainerImageTags>需要多个标记。

Example

以下项目文件显示了其中一些设置的示例。

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

注释

生成上下文(可通过为 (或)提供值ContainerBuildContext来设置,在 Visual Studio 中,通常不同于从命令行运行它时使用的内容docker build(或podman build)。DockerfileContext 必须脱离生成命令行的行为,以确保可以包含解决方案级别的生成项目。

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

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

注释

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

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

后续步骤

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

另请参阅

Docker Compose 生成属性

容器工具启动设置

MSBuild 保留属性和已知属性