Свойства сборки с помощью инструментов для работы с контейнерами

Вы можете настроить способ сборки контейнерных проектов в Visual Studio, задав свойства, используемые MSBuild для сборки проекта. Например, можно изменить имя файла Dockerfile, указать теги и метки для образов, предоставить дополнительные аргументы, передаваемые в команды Docker, и указать, должна ли среда Visual Studio выполнять определенные оптимизации производительности, например производить сборку за пределами среда контейнеров. Кроме того, можно задать свойства отладки, такие как имя запускаемого исполняемого файла, и аргументы командной строки.

Чтобы задать значение свойства, измените файл проекта. Например, допустим, что файл Dockerfile имеет имя MyDockerfile. Задать свойство DockerfileFile в файле проекта можно указанным ниже образом.

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

Вы можете добавить значение свойства в существующий элемент PropertyGroup или, если его нет, создать новый элемент PropertyGroup.

Свойства проектов пакета SDK для .NET

В этом разделе описываются свойства MSBuild, которые применяются при выборе типа сборки контейнера пакета SDK для .NET.

Существует только одно свойство, EnableSdkContainerDebuggingв файле проекта, который необходим для контейнерных проектов пакета SDK для .NET. Он должен иметь значение True для проектов пакета SDK для .NET, чтобы включить отладку.

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

Свойства для проектов Dockerfile

В этом разделе описываются свойства MSBuild, которые применяются при выборе типа сборки контейнера Dockerfile.

В следующей таблице показаны свойства MSBuild, доступные для проектов Dockerfile. Версия пакета NuGet применяется к Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Имя свойства Description Default value Версия пакета NuGet
ContainerDevelopmentMode Определяет, включена ли оптимизация "сборка в узле" (отладка в быстром режиме). Допустимые значения: Fast и Regular. Быстро 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. Неприменимо. 1.0.1872750 или более поздняя
DockerfileContext Контекст по умолчанию, используемый при сборке образа Docker в качестве пути относительно Dockerfile. Устанавливается Visual Studio при добавлении поддержки Docker в проект. В платформа .NET Framework проектах задайте для параметра "." (папка проекта) и в проектах .NET Core и .NET 5 и более поздних версий устанавливается относительный путь к папке решения (обычно ..). 1.0.1872750 или более поздняя
DockerfileFastModeStage Этап Dockerfile (то есть целевой объект), который будет использоваться при сборке образа в режиме отладки. Первый этап, найденный в Dockerfile (обычно базовый)
DockerfileFile Описывает файл Dockerfile по умолчанию, используемый для сборки или запуска контейнера для проекта. Это значение может быть путем. Dockerfile 1.0.1872750 или более поздняя
DockerfileRunArguments Дополнительные аргументы, передаваемые в команду запуска Docker. Неприменимо. 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>

Примечание.

Контекст Docker, для которого можно задать, предоставляя значение DockerfileContext, обычно отличается в Visual Studio для проектов, предназначенных для .NET Core (включая .NET 5 и более поздних версий), от того, что docker build используется при запуске из командной строки. Необходимо отходить от поведения docker build , чтобы обеспечить включение артефактов сборки на уровне решения.

При вызове docker buildвсегда указывается контекст сборки, и при необходимости можно указать путь к Dockerfile. По умолчанию Dockerfile находится в корне контекста, но можно использовать -f флаг для указания альтернативного расположения. Например, можно создать docker build -f Dockerfile .. из каталога проекта или docker build -f ProjectName/Dockerfile . из каталога решения.

Следующие шаги

Общие сведения о свойствах MSBuild см. в статье Свойства MSBuild.

См. также

Свойства сборки Docker Compose

Параметры запуска инструментов для работы с контейнерами

Зарезервированные и стандартные свойства MSBuild