Dela via


Stöd för flera .NET Framework-versioner i projektfilen

När du först skapar ett projekt rekommenderar vi att du skapar ett .NET Standard-klassbibliotek, eftersom det ger kompatibilitet med det bredaste utbudet av förbrukande projekt. Med hjälp av .NET Standard lägger du till plattformsoberoende stöd i ett .NET-bibliotek som standard. Men i vissa scenarier kan du också behöva inkludera kod som riktar sig mot ett visst ramverk. Den här artikeln visar hur du gör det för SDK-liknande projekt.

För SDK-liknande projekt kan du konfigurera stöd för flera målramverk (TFM) i projektfilen och sedan använda dotnet pack eller msbuild /t:pack skapa paketet.

Anmärkning

nuget.exe CLI stöder inte paketering av SDK-liknande projekt, så du bör bara använda dotnet pack eller msbuild /t:pack. Vi rekommenderar att du inkluderar alla egenskaper som vanligtvis finns i .nuspec filen i projektfilen i stället. Information om hur du riktar in dig på flera .NET Framework-versioner i ett projekt som inte är SDK-format finns i Stöd för flera .NET Framework-versioner.

Skapa ett projekt som stöder flera .NET Framework-versioner

  1. Skapa ett nytt klassbibliotek för .NET Standard i Visual Studio eller använd dotnet new classlib.

    Vi rekommenderar att du skapar ett .NET Standard-klassbibliotek för bästa kompatibilitet.

  2. Redigera .csproj-filen för att stödja målramverken. Du kan till exempel ändra

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

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

    Se till att du ändrar XML-elementet från singular till plural (lägg till "s" i både öppna och stäng taggarna).

  3. Om du har någon kod som bara fungerar i en TFM kan du använda #if NET45 eller #if NETSTANDARD2_0 separera TFM-beroende kod. (Mer information finns i How to multitarget.) Du kan till exempel använda följande kod:

    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. Lägg till alla NuGet-metadata som du vill använda i .csproj som MSBuild-egenskaper.

    Listan över tillgängliga paketmetadata och MSBuild-egenskapsnamnen finns i paketmålet. Se även Kontrollera beroendetillgångar.

    Om du vill separera byggrelaterade egenskaper från NuGet-metadata kan du använda en annan PropertyGroup, eller placera NuGet-egenskaperna i en annan fil och använda MSBuilds Import direktiv för att inkludera den. Directory.Build.Props och Directory.Build.Targets stöds också från och med MSBuild 15.0.

  5. Nu ska du använda dotnet pack och det resulterande .nupkg-paketet som riktar sig mot både .NET Standard 2.0 och .NET Framework 4.5.

Här är csproj-filen som genereras med hjälp av föregående steg och .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>

Se även