Свойства сборки с помощью инструментов для работы с контейнерами
Вы можете настроить способ сборки контейнерных проектов в 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 (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>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>
Примечание.
Контекст 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