Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете настроить сборку проектов контейнеров Visual Studio, задав свойства, используемые MSBuild для сборки проекта. Например, можно изменить имя Dockerfile, указать теги и метки для образов, указать дополнительные аргументы, переданные командам Docker, и управлять тем, выполняет ли Visual Studio определенные оптимизации производительности, такие как построение вне среды контейнера. Вы также можете задать свойства отладки, такие как имя исполняемого файла для запуска, а также аргументы командной строки для предоставления.
Чтобы задать значение свойства, измените файл проекта. Например, предположим, что файл Dockerfile называется MyDockerfile. Свойство в файле проекта можно задать DockerfilePath следующим образом.
<PropertyGroup>
<DockerfilePath>MyDockerfile</DockerfilePath>
</PropertyGroup>
Замечание
Свойство заменяет устаревшее свойство DockerfilePathDockerfileFile, которое по-прежнему поддерживается в текущей версии 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 | Значение по умолчанию | Версия пакета NuGet |
|---|---|---|---|
| ContainerDevelopmentMode | Определяет, включена ли оптимизация сборки на узле (отладка "Быстрый режим"). Допустимые значения : Fast и Regular. | Быстрый | 1.0.1872750 или более поздней версии |
| ContainerVsDbgPath | Путь к отладчику VSDBG. | %USERPROFILE%\vsdbg\vs2017u5 |
1.0.1985401 или более поздней версии |
| DockerDebuggeeArguments | При отладке отладчик передает эти аргументы в запущенный исполняемый файл. | Неприменимо к проектам .NET Framework ASP.NET | 1.7.8 или более поздней версии |
| DockerDebuggeeProgram | При отладке отладчик предписывает запустить этот исполняемый файл. | Для проектов .NET Core и .NET 5 и более поздних версий: dotnet ASP.NET проекты .NET Framework: неприменимо (службы IIS) всегда используются. | 1.7.8 или более поздней версии |
| DockerDebuggeeKillProgram | Эта команда используется для убийства выполняемого процесса в контейнере. | Неприменимо к проектам .NET Framework ASP.NET | 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 (обычно базовый) | - |
| DockerfileFileFile | Описывает файл Dockerfile по умолчанию, используемый для сборки или запуска контейнера для проекта. Это значение может быть путем. | Dockerfile | 1.0.1872750 или более поздней версии |
| DockerfileRunArguments | Дополнительные аргументы, переданные команде запуска Docker . | Неприменимо. | 1.0.1872750 или более поздней версии |
| DockerfileRunEnvironmentFiles | Список файлов среды с запятой, примененных во время выполнения Docker. | Неприменимо. | 1.0.1872750 или более поздней версии |
| DockerfileTag | Тег, используемый при создании образа Docker. При отладке к тегу добавляется :d ev. | Имя сборки после удаления неэлементных символов со следующими правилами: Если результирующий тег имеет все числовые значения, то "image" вставляется в виде префикса (например, image2314) Если результирующий тег является пустой строкой, то "image" используется в качестве тега. |
1.0.1872750 или более поздней версии |
В следующей таблице показаны свойства MSBuild, доступные для проектов Dockerfile. Версия пакета NuGet применяется к Microsoft.VisualStudio.Azure.Containers.Tools.Targets.
Некоторые из списков свойств и элементов в следующей таблице эквивалентны замене устаревших свойств. В этом случае устаревшее свойство, которое он заменяет, также называется. Мы рекомендуем обновить проекты для использования поддерживаемых в настоящее время свойств. Поддержка устаревших свойств может быть удалена в будущем обновлении Visual Studio.
Некоторые свойства, перечисленные как устаревшие, заменяются эквивалентными значениями в launchsettings.json, а один — списком элементов MSBuild.
| Название свойства | Description | Значение по умолчанию | Минимальная версия пакета NuGet |
|---|---|---|---|
ContainerDevelopmentMode |
Определяет, включена ли оптимизация сборки на узле (отладка "Быстрый режим"). Допустимые значения : Fast и Regular. | Быстрый | 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 для ContainerLabel1.5.4 для DockerImageLabels |
ContainerFastModeProjectMountDirectory(заменяет DockerFastModeProjectMountDirectory) |
В быстром режиме это свойство управляет тем, где выходной каталог проекта подключен к работающему контейнеру. | C:\app (Windows) или /app (Linux) | 1.23.0 для ContainerFastModeProjectMountDirectory1.9.2 для DockerFastModeProjectMountDirectory |
ContainerBuildArguments(заменяет DockerfileBuildArguments) |
Дополнительные аргументы, переданные команде сборки контейнера. См. статью "Сборка Docker " или сборка podman. | Неприменимо. | 1.23.0 для ContainerBuildArguements1.0.1872750 для DockerfileBuildArguments |
ContainerBuildContext(заменяет DockerfileContext) |
Контекст по умолчанию, используемый при создании образа Docker, в качестве пути относительно Dockerfile. | Устанавливается Visual Studio при добавлении поддержки Docker в проект. Он задает относительный путь к папке решения (обычно ".."). | 1.23.0 для ContainerBuildContext1.0.1872750 для DockerfileContext |
ContainerFastModeStage(заменяет DockerfileFastModeStage) |
Этап Dockerfile (то есть целевой объект), используемый при создании образа в режиме отладки. | Первый этап, найденный в Dockerfile (обычно базовый) | - |
ContainerIncludeDefaultImageLabels (заменяет: DockerIncludeDefaultImageLabels) |
Если задано значение false, не включает теги com.microsoft.created-by=visual-studio изображений по умолчанию и com.microsoft.visual-studio.project-name=$(MSBuildProjectName). |
True | 1.23.0 для ContainerIncludeDefaultImageLabels |
ContainerLabelBuiltImages (заменяет DockerLabelBuiltImages) |
Включите метки на встроенные изображения. Если значение false, метки не добавляются, включая определяемые пользователем метки. | True | 1.23.0 для ContainerLabelBuiltImages |
DockerfilePath(заменяет DockerfileFile) |
Описывает файл Dockerfile по умолчанию, используемый для сборки или запуска контейнера для проекта. | Dockerfile | 1.23.0 для DockerfilePath1.0.1872750 для DockerfileFile |
ContainerRepository(заменяет DockerRepository) |
Репозиторий, используемый в метке, например webapplication1 в метке webapplication1:dev. |
Имя сборки. | 1.23.0 для ContainerRepository |
ContainerImageTag или ContainerImageTags(заменяет DockerfileTag) |
Тег, используемый при создании изображения. При отладке к тегу добавляется :d ev. | Имя сборки после удаления неэлементных символов со следующими правилами: Если результирующий тег имеет все числовые значения, то "image" вставляется в виде префикса (например, image2314) Если результирующий тег является пустой строкой, то "image" используется в качестве тега. |
1.23.0 для ContainerImageTag, ContainerImageTags1.0.1872750 для DockerfileTag. |
DockerDebuggeeArguments(устаревшее, использование commandLineArgs в launchsettings.json) |
При отладке отладчик передает эти аргументы в запущенный исполняемый файл. | - | 1.7.8 |
DockerDebuggeeProgram(устаревшее, использование executablePath в launchsettings.json) |
При отладке отладчик предписывает запустить этот исполняемый файл. | - | 1.7.8 |
DockerDebuggeeKillProgram |
Эта команда используется для убийства выполняемого процесса в контейнере. | - | 1.7.8 |
DockerDebuggeeWorkingDirectory(устаревшее; использование workingDirectory в launchsettings.json) |
При отладке отладчику будет показано использовать этот путь в качестве рабочего каталога. | C:\app (Windows) или /app (Linux) | 1.7.8 |
| DockerDefaultTargetOS | Целевая операционная система по умолчанию, используемая при создании образа Docker. | Задано Visual Studio. | 1.0.1985401 |
DockerfileRunArguments(устаревшее, использование containerRunArguments в launchsettings.json) |
Дополнительные аргументы, переданные команде запуска Docker . | Неприменимо. | 1.0.1872750 |
DockerfileRunEnvironmentFiles(устаревшее, использование containerRunEnvironmentFiles в launchsettings.json) |
Список файлов среды с запятой, примененных во время выполнения Docker. | Неприменимо. | 1.0.1872750 |
ContainerRepository и ContainerImageTag (или ContainerImageTags) предоставляют возможность указывать две части метки изображения, репозиторий и один или несколько тегов (например, webapp1:alpha). В предыдущих версиях Visual Studio можно использовать DockerfileTag свойство для указания репозитория и одного тега, но это было ограничение, например, невозможно указать несколько тегов. Свойство DockerfileTag устарело; теперь проекты должны использовать ContainerRepository и ContainerImageTag, а текущая версия также поддерживает ContainerImageTags для нескольких тегов.
В предыдущих версиях Visual Studio синтаксис был <DockerfileTag>webapp1:alpha</DockerfileTag>. Текущий эквивалент и , если <ContainerImageTags>alpha;latest</ContainerImageTags> требуется <ContainerRepository>webapp1</ContainerRespository><ContainerImageTag>alpha</ContainerImageTag>несколько тегов.
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 или DockerfileContext), обычно отличается в Visual Studio для проектов, которые docker build (или podman build) используются при запуске из командной строки. Отклонение от поведения командной строки сборки необходимо для включения артефактов сборки на уровне решения.
При вызове docker build (или podman build) всегда указывается контекст сборки, и при необходимости можно указать путь к Dockerfile. По умолчанию Dockerfile находится в корне контекста, но можно использовать -f флаг для указания альтернативного расположения. Например, можно создать docker build -f Dockerfile .. из каталога проекта или docker build -f ProjectName/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>
Замечание
Контекст 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