Partilhar via


Suporte a várias versões do .NET Framework em seu arquivo de projeto

Quando você cria um projeto pela primeira vez, recomendamos que você crie uma biblioteca de classes .NET Standard, pois ela fornece compatibilidade com a maior variedade de projetos de consumo. Usando o .NET Standard, você adiciona suporte entre plataformas a uma biblioteca .NET por padrão. No entanto, em alguns cenários, você também pode precisar incluir código direcionado a uma estrutura específica. Este artigo mostra como fazer isso para projetos no estilo SDK .

Para projetos no estilo SDK, você pode configurar o suporte para estruturas de vários destinos (TFM) em seu arquivo de projeto e, em seguida, usar dotnet pack ou msbuild /t:pack criar o pacote.

Observação

nuget.exe CLI não suporta o empacotamento de projetos no estilo SDK, portanto, você deve usar dotnet pack apenas ou msbuild /t:pack. Recomendamos que inclua todas as propriedades que geralmente estão no ficheiro .nuspec no ficheiro de projeto, em vez disso. Para direcionar várias versões do .NET Framework em um projeto que não seja no estilo SDK, consulte Suporte a várias versões do .NET Framework.

Criar um projeto que ofereça suporte a várias versões do .NET Framework

  1. Crie uma nova biblioteca de classes .NET Standard no Visual Studio ou use o dotnet new classlib.

    Recomendamos que você crie uma biblioteca de classes .NET Standard para melhor compatibilidade.

  2. Edite o arquivo .csproj para dar suporte às estruturas de destino. Para exemplo, mude

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

    Certifique-se de alterar o elemento XML alterado do singular para o plural (adicione o "s" às tags open e close).

  3. Se tiver código que funcione apenas num TFM, pode usar #if NET45 ou #if NETSTANDARD2_0 para separar o código dependente do TFM. (Para obter mais informações, consulte Como fazer multitargeting.) Por exemplo, pode usar o código seguinte:

    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
       }
    }
    
  4. Adicione quaisquer metadados do NuGet desejados ao .csproj como propriedades do MSBuild.

    Para obter a lista de metadados de pacotes disponíveis e os nomes de propriedades do MSBuild, consulte pack target. Consulte também Controlando ativos de dependência.

    Se quiser separar as propriedades relacionadas à compilação dos metadados do NuGet, você pode usar um arquivo diferente PropertyGroupou colocar as propriedades do NuGet em outro arquivo e usar a diretiva do Import MSBuild para incluí-lo. Directory.Build.Props e Directory.Build.Targets também são suportados a partir do MSBuild 15.0.

  5. Agora, use dotnet pack e o .nupkg resultante tem como alvo o .NET Standard 2.0 e o .NET Framework 4.5.

Aqui está o arquivo .csproj que é gerado usando as etapas anteriores e o .NET Core SDK 2.2.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
    <Description>Sample project that targets multiple TFMs</Description>
  </PropertyGroup>

</Project>

Consulte também