Suporte a várias versões de .NET Framework em seu arquivo de projeto
Ao criar um projeto pela primeira vez, recomendamos criar uma biblioteca de classes .NET Standard, pois ela fornece compatibilidade com uma grande variedade de projetos de consumo. Ao usar o .NET Standard, é possível adicionar suporte de plataforma cruzada a uma biblioteca .NET por padrão. No entanto, em alguns cenários, talvez seja necessário incluir um código direcionado a uma estrutura específica. Este artigo mostra como fazer isso para projetos de estilo SDK.
Para projetos de estilo SDK, é possível configurar o suporte para várias estruturas de destinos (TFM) no arquivo de projeto e, em seguida, usar dotnet pack
ou msbuild /t:pack
para criar o pacote.
Observação
A CLI nuget.exe não é compatível com o empacotamento de projetos em estilo SDK, portanto é preciso usar dotnet pack
ou msbuild /t:pack
. É recomendável incluir todas as propriedades que geralmente estão no arquivo .nuspec
no arquivo de projeto. Para oferecer suporte a várias versões do .NET Framework em um projeto de estilo não SDK, confira Suporte a várias versões do .NET Framework.
Criar um projeto compatível com várias versões de .NET Framework
Crie uma nova biblioteca de classes .NET Standard no Visual Studio ou use
dotnet new classlib
.Recomendamos criar uma biblioteca de classes .NET Standard para obter a melhor compatibilidade.
Edite o arquivo .csproj para ser compatível com as estruturas de destino. Por exemplo, alteração
<TargetFramework>netstandard2.0</TargetFramework>
para:
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
Certifique-se de alterar o elemento XML de singular para plural (adicione o plural às marcas de abrir e fechar).
Se você tem qualquer código que funciona apenas em um TFM, use
#if NET45
ou#if NETSTANDARD2_0
para separar o código dependente do TFM. (Para obter mais informações, consulte Como utilizar multiplataforma.) Por exemplo, você pode usar o seguinte código:public string Platform { get { #if NET45 return ".NET Framework" #elif NETSTANDARD2_0 return ".NET Standard" #else #error This code block does not match csproj TargetFrameworks list #endif } }
Adicione qualquer metadado do NuGet desejado a .csproj como propriedades do MSBuild.
Para obter a lista de metadados de pacote disponíveis e os nomes de propriedade do MSBuild, confira o pacote de destino. Confira também Controlar ativos de dependência.
Se quiser separar as propriedades relacionadas à compilação dos metadados do NuGet, use um
PropertyGroup
diferente ou coloque as propriedades do NuGet em outro arquivo e use a diretivaImport
do MSBuild para incluí-lo.Directory.Build.Props
eDirectory.Build.Targets
também têm suporte a partir do MSBuild 15.0.Agora, use
dotnet pack
e os .nupkg resultantes como destino do .NET Standard 2.0 e do .NET Framework 4.5.
Este é o arquivo .csproj que é gerado usando as etapas anteriores e o SDK do .NET Core 2.2.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
<Description>Sample project that targets multiple TFMs</Description>
</PropertyGroup>
</Project>