Compartilhar via


Usar SDKs de projeto do MSBuild

Você pode referenciar toda a infraestrutura de build necessária para uma pilha de tecnologia de desenvolvimento, como o .NET SDK, simplesmente ao referenciar um conjunto de propriedades e destinos coletivamente conhecido como SDK de projeto pela sua identificação específica. O ID faz referência a um conjunto específico de .props arquivos que contêm definições de propriedade e de .targets arquivos que contêm definições de destino. Você faz referência a um SDK de projeto usando o atributo Sdk no nó de nível superior do projeto.

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net46</TargetFramework>
    </PropertyGroup>
</Project>

Durante a avaliação do projeto, o MSBuild adiciona importações implícitas na parte superior e inferior do arquivo de projeto:

<Project>
    <!-- Implicit top import -->
    <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

    <PropertyGroup>
        <TargetFramework>net46</TargetFramework>
    </PropertyGroup>

    <!-- Implicit bottom import -->
    <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

Há muitos SDKs distribuídos pela Microsoft. O SDK do projeto referenciado no exemplo anterior tem o moniker Microsoft.NET.Sdk. Os SDKs do projeto associados ao .NET Core e ao .NET 5 e posteriores são listados na visão geral do SDK do Projeto do .NET.

Referenciar um SDK de projeto

Há três maneiras de fazer referência a um SDK do projeto:

Use o atributo Sdk no elemento Project

<Project Sdk="My.Custom.Sdk">
    ...
</Project>

Uma importação implícita é adicionada à parte superior e inferior do projeto, conforme discutido anteriormente.

Para especificar uma versão específica do SDK, acrescente-a ao Sdk atributo:

<Project Sdk="My.Custom.Sdk/1.2.3">
    ...
</Project>

Usar o elemento de nível Sdk superior

<Project>
    <Sdk Name="My.Custom.Sdk" Version="1.2.3" />
    ...
</Project>

Uma importação implícita é adicionada à parte superior e inferior do projeto, conforme discutido anteriormente.

O atributo Version não é obrigatório.

Usar o Import elemento em qualquer lugar do seu projeto

<Project>
    <PropertyGroup>
        <MyProperty>Value</MyProperty>
    </PropertyGroup>
    <Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
    ...
    <Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>

Quando você inclui explicitamente as importações em seu projeto, tem controle total sobre a ordem.

Ao usar o Import elemento, você também pode especificar um atributo opcional Version . Por exemplo, você pode especificar <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />.

Aviso

Se você alterar seu projeto para usar os elementos Import, certifique-se de adicionar ambas as importações .props e .targets, e de remover o SDK do elemento Project e dos elementos Sdk. A falha ao fazer isso resultará em importações duplicadas e um MSB4011 aviso.

Como os SDKs do projeto são resolvidos

Ao avaliar a importação, o MSBuild resolve dinamicamente o caminho para o SDK do projeto com base no nome e na versão especificadas. O MSBuild também tem uma lista de resolvedores do SDK registrados, que são plug-ins que localizam SDKs de projeto em seu computador. Esses plug-ins incluem:

  • Um resolvedor baseado em NuGet que consulta os feeds de pacotes que você configurou em busca de pacotes NuGet que correspondam à ID e versão do SDK que você especificou.

    Esse resolvedor só estará ativo se você especificou uma versão opcional. Ele pode ser usado para qualquer SDK de projeto personalizado.

  • Um resolvedor do SDK do .NET que resolve os SDKs do MSBuild instalados com o SDK do .NET.

    Esse resolvedor localiza SDKs de projeto, como Microsoft.NET.Sdk e Microsoft.NET.Sdk.Web que fazem parte do produto.

  • Um resolvedor padrão que resolve SDKs que foram instalados com o MSBuild.

O resolvedor do SDK baseado em NuGet dá suporte à especificação de uma versão no arquivo global.json , que permite controlar a versão do SDK do projeto em um só lugar e não em cada projeto individual:

{
    "msbuild-sdks": {
        "My.Custom.Sdk": "5.0.0",
        "My.Other.Sdk": "1.0.0-beta"
    }
}

Somente uma versão de cada SDK de projeto pode ser usada durante um build. Se você fizer referência a duas versões diferentes do mesmo SDK do projeto, o MSBuild emitirá um aviso. É recomendável não especificar uma versão em seus projetos se uma versão for especificada no arquivo global.json .