Stöd för flera .NET-ramverk 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.

Skapa ett projekt som stöder flera .NET-ramverk

  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>

Multi-targeting med duplicerade ramverk

Från och med NuGet 7.6 /.NET SDK 10.0.300 kan du använda flera TargetFrameworks värden som matchar samma underliggande ramverk. Detta möjliggör scenarier som att bygga för flera körmiljöer eller sikta på flera versioner av en värdapplikation från ett enda projekt.

Mer information om hur detta fungerar med återställning och paket finns i Rikta in dig på flera ramverk.

Se även