Partilhar via


Usar SDKs de projeto MSBuild

Você pode fazer referência a toda a infraestrutura de compilação necessária para uma pilha de tecnologia de desenvolvimento, como o SDK do .NET, simplesmente fazendo referência a um conjunto de propriedades e destinos conhecidos coletivamente como SDK de projeto por sua ID específica. A ID faz referência a um conjunto específico de ficheiros que contêm definições de propriedade de .props e ficheiros de .targets que contêm definições de destino. Você faz referência a um SDK de projeto usando o atributo Sdk no nó de projeto de nível superior.

<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 do 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>

Existem muitos SDKs distribuídos pela Microsoft. O SDK do projeto mencionado no exemplo anterior tem o apelido Microsoft.NET.Sdk. Os SDKs de projeto associados ao .NET Core e ao .NET 5 e posteriores estão listados na visão geral do SDK do .NET Project.

Fazer referência a um SDK de projeto

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

Utilize 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 Sdk ao atributo:

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

Usar o elemento de nível superior Sdk

<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 Version atributo não é obrigatório.

Use 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, você tem controle total sobre o pedido.

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" />.

Advertência

Se alterar o seu projeto para usar os elementos Import, certifique-se de adicionar as importações .props e .targets, e de remover o SDK dos elementos Project e Sdk. Se não o fizerem, haverá duplicação de importações e um MSB4011 aviso.

Como os SDKs de 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 especificados. O MSBuild também tem uma lista de resolvedores SDK registrados, que são plug-ins que localizam SDKs de projeto em sua máquina. Esses plug-ins incluem:

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

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

  • Um solucionador de SDK do .NET que soluciona SDKs do MSBuild instalados com o .NET SDK.

    Este 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 MSBuild.

O resolvedor SDK baseado em NuGet oferece 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, em vez de em cada projeto individual:

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

Apenas uma versão de cada SDK de projeto pode ser usada durante uma compilação. Se você fizer referência a duas versões diferentes do mesmo SDK de 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 .