Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode personalizar como o Visual Studio cria seus projetos de contêiner definindo as propriedades que o MSBuild usa para criar seu projeto. Por exemplo, você pode alterar o nome do Dockerfile, especificar marcas e rótulos para suas imagens, fornecer argumentos adicionais passados para comandos do Docker e controlar se o Visual Studio faz determinadas otimizações de desempenho, como a criação fora do ambiente de contêiner. Você também pode definir propriedades de depuração, como o nome do executável a ser iniciado e os argumentos de linha de comando a serem fornecidos.
Para definir o valor de uma propriedade, edite o arquivo de projeto. Por exemplo, suponha que seu Dockerfile se chama MyDockerfile. Você pode definir a DockerfilePath propriedade no arquivo de projeto da seguinte maneira.
<PropertyGroup>
<DockerfilePath>MyDockerfile</DockerfilePath>
</PropertyGroup>
Observação
A propriedade DockerfilePath substitui a propriedade DockerfileFilepreterida, que ainda tem suporte na versão atual do Visual Studio.
Para definir o valor de uma propriedade, edite o arquivo de projeto. Por exemplo, suponha que seu Dockerfile se chama MyDockerfile. Você pode definir a DockerfileFile propriedade no arquivo de projeto da seguinte maneira.
<PropertyGroup>
<DockerfileFile>MyDockerfile</DockerfileFile>
</PropertyGroup>
Você pode adicionar a configuração de propriedade a um elemento existente PropertyGroup ou, se não houver um, criar um novo PropertyGroup elemento.
Propriedades para projetos do SDK do .NET
Esta seção descreve as propriedades do MSBuild que se aplicam quando você escolhe o tipo de build de contêiner do SDK do .NET.
Há apenas uma propriedade, EnableSdkContainerDebuggingno arquivo de projeto que é necessário para projetos em contêineres do SDK do .NET. Ele deve ser definido True para projetos do SDK do .NET para habilitar a depuração.
<PropertyGroup>
<EnableSdkContainerDebugging>True</EnableSdkContainerDebugging>
</PropertyGroup>
Propriedades para projetos do Dockerfile
Esta seção descreve as propriedades do MSBuild que se aplicam quando você escolhe o tipo de build de contêiner do Dockerfile.
A tabela a seguir mostra as propriedades do MSBuild disponíveis para projetos do Dockerfile. A versão do pacote NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.
| Nome da propriedade | Description | Valor padrão | Versão do pacote NuGet |
|---|---|---|---|
| ContainerDevelopmentMode | Controla se a otimização "build-on-host" (depuração do "Modo Rápido") está habilitada. Os valores permitidos são Rápido e Regular. | Rápido | 1.0.1872750 ou mais recente |
| ContainerVsDbgPath | O caminho para o depurador VSDBG. | %USERPROFILE%\vsdbg\vs2017u5 |
1.0.1985401 ou mais recente |
| DockerDebuggeeArguments | Ao depurar, o depurador é instruído a passar esses argumentos para o executável iniciado. | Não aplicável a projetos do .NET Framework ASP.NET | 1.7.8 ou mais recente |
| DockerDebuggeeProgram | Ao depurar, o depurador é instruído a iniciar esse executável. | Para projetos .NET Core e .NET 5 e posteriores: dotnet, ASP.NET projetos do .NET Framework: Não aplicável (O IIS (Serviços de Informações da Internet) é sempre usado) | 1.7.8 ou mais recente |
| DockerDebuggeeKillProgram | Esse comando é usado para eliminar o processo em execução em um contêiner. | Não aplicável a projetos do .NET Framework ASP.NET | 1.7.8 ou mais recente |
| DockerDebuggeeWorkingDirectory | Ao depurar, o depurador é instruído a usar esse caminho como o diretório de trabalho. | C:\app (Windows) ou /app (Linux) | 1.7.8 ou mais recente |
| DockerDefaultTargetOS | O sistema operacional de destino padrão usado ao compilar a imagem do Docker. | Definido pelo Visual Studio. | 1.0.1985401 ou mais recente |
| DockerImageLabels | O conjunto padrão de rótulos aplicado à imagem do Docker. | com.microsoft.created-by=visual-studio; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) | 1.5.4 ou mais recente |
| DockerFastModeProjectMountDirectory | No Modo Rápido, essa propriedade controla onde o diretório de saída do projeto é montado em volume no contêiner em execução. | C:\app (Windows) ou /app (Linux) | 1.9.2 ou mais recente |
| DockerfileBuildArguments | Argumentos adicionais passados para o comando de build do Docker . | Não aplicável. | 1.0.1872750 ou mais recente |
| DockerfileContext | O contexto padrão usado ao criar a imagem do Docker, como um caminho relativo ao Dockerfile. | Definido pelo Visual Studio quando o suporte do Docker é adicionado a um projeto. Em projetos do .NET Framework, defina como "". (a pasta do projeto) e em projetos .NET Core e .NET 5 e posteriores, ele é definido como o caminho relativo para a pasta da solução (geralmente ".."). | 1.0.1872750 ou mais recente |
| DockerfileFastModeStage | O estágio do Dockerfile (ou seja, destino) a ser usado ao compilar a imagem no modo de depuração. | Primeiro estágio encontrado no Dockerfile (geralmente base) | - |
| DockerfileFile | Descreve o Dockerfile padrão a ser usado para compilar/executar o contêiner para o projeto. Esse valor pode ser um caminho. | Dockerfile | 1.0.1872750 ou mais recente |
| DockerfileRunArguments | Argumentos adicionais passados para o comando de execução do Docker . | Não aplicável. | 1.0.1872750 ou mais recente |
| DockerfileRunEnvironmentFiles | Lista delimitada por ponto-e-vírgula de arquivos de ambiente aplicados durante a execução do Docker. | Não aplicável. | 1.0.1872750 ou mais recente |
| DockerfileTag | A marca a ser usada ao compilar a imagem do Docker. Na depuração, um ":d ev" é acrescentado à marca. | Nome do assembly após a remoção de caracteres não numéricos com as seguintes regras: Se a marca resultante for toda numérica, a "imagem" será inserida como um prefixo (por exemplo, image2314) Se a marca resultante for uma cadeia de caracteres vazia, a "imagem" será usada como a marca. |
1.0.1872750 ou mais recente |
A tabela a seguir mostra as propriedades do MSBuild disponíveis para projetos do Dockerfile. A versão do pacote NuGet se aplica a Microsoft.VisualStudio.Azure.Containers.Tools.Targets.
Algumas das propriedades e listas de itens na tabela a seguir são substituições equivalentes para propriedades obsoletas. Nesse caso, a propriedade obsoleta que ela substitui também é nomeada. Recomendamos atualizar projetos para usar as propriedades com suporte no momento. O suporte para propriedades obsoletas pode ser removido em uma atualização futura do Visual Studio.
Algumas propriedades listadas como obsoletas são substituídas por valores equivalentes em launchsettings.jsone uma é substituída pela lista de itens do MSBuild.
| Nome da propriedade | Description | Valor padrão | Versão mínima do pacote NuGet |
|---|---|---|---|
ContainerDevelopmentMode |
Controla se a otimização "build-on-host" (depuração do "Modo Rápido") está habilitada. Os valores permitidos são Rápido e Regular. | Rápido | 1.0.1872750 |
ContainerVsDbgPath |
O caminho para o depurador VSDBG. | %USERPROFILE%\vsdbg\vs2017u5 |
1.0.1985401 |
ContainerLabel(substitui DockerImageLabels) |
O conjunto padrão de rótulos aplicado à imagem do Docker.ContainerLabel é uma lista de itens do MSBuild, não uma propriedade. |
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) |
1.23.0 para ContainerLabel1.5.4 para DockerImageLabels |
ContainerFastModeProjectMountDirectory(substitui DockerFastModeProjectMountDirectory) |
No Modo Rápido, essa propriedade controla onde o diretório de saída do projeto é montado em volume no contêiner em execução. | C:\app (Windows) ou /app (Linux) | 1.23.0 para ContainerFastModeProjectMountDirectory1.9.2 para DockerFastModeProjectMountDirectory |
ContainerBuildArguments(substitui DockerfileBuildArguments) |
Argumentos adicionais passados para o comando de build de contêiner. Consulte o build do Docker ou o build do podman. | Não aplicável. | 1.23.0 para ContainerBuildArguements1.0.1872750 para DockerfileBuildArguments |
ContainerBuildContext(substitui DockerfileContext) |
O contexto padrão usado ao criar a imagem do Docker, como um caminho relativo ao Dockerfile. | Definido pelo Visual Studio quando o suporte do Docker é adicionado a um projeto. Ele é definido como o caminho relativo para a pasta da solução (geralmente ".."). | 1.23.0 para ContainerBuildContext1.0.1872750 para DockerfileContext |
ContainerFastModeStage(substitui DockerfileFastModeStage) |
O estágio do Dockerfile (ou seja, destino) a ser usado ao compilar a imagem no modo de depuração. | Primeiro estágio encontrado no Dockerfile (geralmente base) | - |
ContainerIncludeDefaultImageLabels (substitui: DockerIncludeDefaultImageLabels) |
Se definido como false, não inclui marcas com.microsoft.created-by=visual-studio de imagem padrão e com.microsoft.visual-studio.project-name=$(MSBuildProjectName). |
Verdade | 1.23.0 para ContainerIncludeDefaultImageLabels |
ContainerLabelBuiltImages (substitui DockerLabelBuiltImages) |
Inclua rótulos em imagens criadas. Se for falso, nenhum rótulo será adicionado, incluindo rótulos definidos pelo usuário. | Verdade | 1.23.0 para ContainerLabelBuiltImages |
DockerfilePath(substitui DockerfileFile) |
Descreve o Dockerfile padrão a ser usado para compilar/executar o contêiner para o projeto. | Dockerfile | 1.23.0 para DockerfilePath1.0.1872750 para DockerfileFile |
ContainerRepository(substitui DockerRepository) |
O repositório a ser usado no rótulo, por exemplo webapplication1 , no rótulo webapplication1:dev. |
O nome do assembly. | 1.23.0 para ContainerRepository |
ContainerImageTag ou ContainerImageTags(substitui DockerfileTag) |
A marca a ser usada ao compilar a imagem. Na depuração, um ":d ev" é acrescentado à marca. | Nome do assembly após a remoção de caracteres não numéricos com as seguintes regras: Se a marca resultante for toda numérica, a "imagem" será inserida como um prefixo (por exemplo, image2314) Se a marca resultante for uma cadeia de caracteres vazia, a "imagem" será usada como a marca. |
1.23.0 para ContainerImageTag, ContainerImageTags1.0.1872750 para DockerfileTag. |
DockerDebuggeeArguments(obsoleto, use commandLineArgs em launchsettings.json) |
Ao depurar, o depurador é instruído a passar esses argumentos para o executável iniciado. | - | 1.7.8 |
DockerDebuggeeProgram(obsoleto, use executablePath em launchsettings.json) |
Ao depurar, o depurador é instruído a iniciar esse executável. | - | 1.7.8 |
DockerDebuggeeKillProgram |
Esse comando é usado para eliminar o processo em execução em um contêiner. | - | 1.7.8 |
DockerDebuggeeWorkingDirectory(obsoleto; use workingDirectory em launchsettings.json) |
Ao depurar, o depurador é instruído a usar esse caminho como o diretório de trabalho. | C:\app (Windows) ou /app (Linux) | 1.7.8 |
| DockerDefaultTargetOS | O sistema operacional de destino padrão usado ao compilar a imagem do Docker. | Definido pelo Visual Studio. | 1.0.1985401 |
DockerfileRunArguments(obsoleto, use containerRunArguments em launchsettings.json) |
Argumentos adicionais passados para o comando de execução do Docker . | Não aplicável. | 1.0.1872750 |
DockerfileRunEnvironmentFiles(obsoleto, use containerRunEnvironmentFiles em launchsettings.json) |
Lista delimitada por ponto-e-vírgula de arquivos de ambiente aplicados durante a execução do Docker. | Não aplicável. | 1.0.1872750 |
ContainerRepository e ContainerImageTag (ou ContainerImageTags) fornecem a capacidade de especificar as duas partes de um rótulo de imagem, o repositório e uma ou mais marcas (por exemplo, webapp1:alpha). Nas versões anteriores do Visual Studio, você poderia usar a DockerfileTag propriedade para especificar o repositório e uma única marca, mas isso tinha limitações, por exemplo, que não havia capacidade de especificar várias marcas. A propriedade DockerfileTag está obsoleta; os projetos agora devem ser usados ContainerRepository e ContainerImageTag, e a versão atual também dá suporte a várias ContainerImageTags marcas.
Nas versões anteriores do Visual Studio, a sintaxe era <DockerfileTag>webapp1:alpha</DockerfileTag>. O equivalente atual é <ContainerRepository>webapp1</ContainerRespository> e <ContainerImageTag>alpha</ContainerImageTag>ou <ContainerImageTags>alpha;latest</ContainerImageTags> se você quiser várias marcas.
Example
O arquivo de projeto a seguir mostra exemplos de algumas dessas configurações.
<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>
Observação
O contexto de build, que você pode definir fornecendo um valor para ContainerBuildContext (ou DockerfileContext), geralmente é diferente no Visual Studio para projetos do que docker build (ou podman build) usa quando você o executa na linha de comando. A saída do comportamento da linha de comando de build é necessária para garantir que os artefatos de build no nível da solução possam ser incluídos.
Quando você chama docker build (ou podman build), você sempre especifica um contexto de build e, opcionalmente, pode especificar um caminho para o Dockerfile. O padrão é que o Dockerfile está na raiz do contexto, mas você pode usar o -f sinalizador para especificar um local alternativo. Por exemplo, você pode criar com docker build -f Dockerfile .. o diretório do projeto ou docker build -f ProjectName/Dockerfile . com o diretório da solução.
<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>
Observação
O contexto do Docker, para o qual você pode definir fornecendo um valor DockerfileContext, geralmente é diferente no Visual Studio para projetos direcionados ao .NET Core (incluindo .NET 5 e posterior) do que docker build usa quando você o executa na linha de comando. A saída do comportamento é docker build necessária para garantir que os artefatos de build no nível da solução possam ser incluídos.
Ao chamar docker build, você sempre especifica um contexto de build e, opcionalmente, pode especificar um caminho para o Dockerfile. O padrão é que o Dockerfile está na raiz do contexto, mas você pode usar o -f sinalizador para especificar um local alternativo. Por exemplo, você pode criar com docker build -f Dockerfile .. o diretório do projeto ou docker build -f ProjectName/Dockerfile . com o diretório da solução.
Próximas etapas
Para obter informações sobre as propriedades do MSBuild em geral, consulte Propriedades do MSBuild.
Consulte também
Propriedades de build do Docker Compose