Como usar SDKs de projeto do MSBuild
O MSBuild 15.0 introduziu o conceito de "SDK de projeto", que simplifica o uso de kits de desenvolvimento de software que exigem que as propriedades e os destinos sejam importados.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
Durante a avaliação do projeto, o MSBuild adiciona importações implícitas nas partes 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>
Referenciar um SDK de projeto
Há três maneiras de referenciar um SDK de projeto:
Usar o atributo Sdk
no elemento <Project/>
<Project Sdk="My.Custom.Sdk">
...
</Project>
Uma importação implícita é adicionada às partes superior e inferior do projeto, conforme descrito anteriormente.
Para especificar uma versão do SDK, anexe-a ao atributo Sdk
:
<Project Sdk="My.Custom.Sdk/1.2.3">
...
</Project>
Usar o elemento <Sdk/>
de nível superior
<Project>
<Sdk Name="My.Custom.Sdk" Version="1.2.3" />
...
</Project>
Uma importação implícita é adicionada às partes superior e inferior do projeto, conforme descrito anteriormente.
O atributo Version
não é obrigatório.
Usar o elemento <Import/>
em qualquer lugar no projeto
<Project>
<PropertyGroup>
<MyProperty>Value</MyProperty>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
...
<Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>
Incluir explicitamente as importações no projeto permite que você tenha controle total sobre a ordem.
Ao usar o elemento <Import/>
, você também pode especificar um atributo Version
opcional. Por exemplo, você pode especificar <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />
.
Aviso
Caso esteja alterando o projeto para usar elementos <Import/>
, adicione as importações .props
e .targets
e remova o SDK do elemento e <Project/>
dos elementos <Sdk/>
. Se isso não for feito, importações serão duplicadas e um aviso MSB4011
será emitido.
Como os SDKs de projeto são resolvidos
Ao avaliar a importação, o MSBuild resolve dinamicamente o caminho para o SDK de projeto com base no nome e na versão especificados. O MSBuild também tem uma lista de resolvedores de SDK registrados, que são plug-ins que localizam SDKs de projeto no seu computador. Os plug-ins incluem:
Um resolvedor baseado em NuGet que consulta os feeds de pacotes configurados para pacotes do NuGet que correspondem à 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 resolvedor do SDK do .NET que resolva os SDKs do MSBuild instalados com o SDK do .NET.
Esse resolvedor localiza SDKs de projeto, como
Microsoft.NET.Sdk
eMicrosoft.NET.Sdk.Web
, que fazem parte do produto.Um resolvedor padrão que resolve SDKs instalados com o MSBuild.
O resolvedor de SDK baseado em NuGet dá suporte à especificação de uma versão no arquivo global.json, a qual permite que você controle a versão do SDK do projeto em um único local 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 uma compilação. Se você referenciar duas versões diferentes do mesmo SDK do projeto, o MSBuild emitirá um aviso. É recomendável não especificar uma versão nos projetos caso uma versão esteja especificada no arquivo global.json.
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de