Freigeben über


Unterstützen mehrerer .NET Frameworks in Ihrer Projektdatei

Wenn Sie ein Projekt zum ersten Mal erstellen, empfehlen wir, eine .NET Standard-Klassenbibliothek zu erstellen, da sie Kompatibilität mit der größtmöglichen Palette von verbrauchenden Projekten bietet. Mithilfe von .NET Standard fügen Sie standardmäßig plattformübergreifende Unterstützung zu einer .NET-Bibliothek hinzu. In einigen Szenarien müssen Sie möglicherweise auch Code einschließen, der auf ein bestimmtes Framework abzielt. In diesem Artikel wird beschrieben, wie Sie dies für SDK-Formatprojekte tun.

Für Projekte im SDK-Stil können Sie die Unterstützung für mehrere Zielframeworks (TFM) in Ihrer Projektdatei konfigurieren und dann dotnet pack oder msbuild /t:pack verwenden, um das Paket zu erstellen.

Erstellen eines Projekts, das mehrere .NET Frameworks unterstützt

  1. Erstellen Sie eine neue .NET Standard-Klassenbibliothek entweder in Visual Studio oder verwenden Sie dotnet new classlib.

    Es wird empfohlen, eine .NET Standard-Klassenbibliothek für optimale Kompatibilität zu erstellen.

  2. Bearbeiten Sie die CSPROJ-Datei , um die Zielframeworks zu unterstützen. Ändern Sie z. B.

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

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

    Stellen Sie sicher, dass Sie das XML-Element von Singular zu Plural ändern (fügen Sie die "s" sowohl zu den geöffneten als auch zu schließenden Tags hinzu).

  3. Wenn Sie Code haben, der nur in einem TFM funktioniert, können Sie ihn mit #if NET45 oder #if NETSTANDARD2_0 trennen, um TFM-abhängigen Code zu kennzeichnen. (Weitere Informationen finden Sie unter How to multitarget.) Sie können beispielsweise den folgenden Code verwenden:

    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. Fügen Sie alle gewünschten NuGet-Metadaten als MSBuild-Eigenschaften zum .csproj hinzu.

    Die Liste der verfügbaren Paketmetadaten und die Namen der MSBuild-Eigenschaften finden Sie unter Pack-Ziel. Siehe auch Steuern von Abhängigkeitsressourcen.

    Wenn Sie buildbezogene Eigenschaften von NuGet-Metadaten trennen möchten, können Sie eine andere PropertyGroupverwenden oder die NuGet-Eigenschaften in eine andere Datei einfügen und die MSBuild-Direktive Import verwenden, um sie einzuschließen. Directory.Build.Props und Directory.Build.Targets werden auch ab MSBuild 15.0 unterstützt.

  5. "Verwenden Sie nun für die resultierende .nupkg sowohl für .NET Standard 2.0 als auch für .NET Framework 4.5."

Dies ist die CSPROJ-Datei , die mithilfe der vorherigen Schritte und .NET Core SDK 2.2 generiert wird.

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

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

</Project>

Multi-Targeting mit duplizierten Frameworks

Ab NuGet 7.6 / .NET SDK 10.0.300 können Sie mehrere TargetFrameworks Werte verwenden, die in dasselbe zugrunde liegende Framework aufgelöst werden. Dies ermöglicht Szenarien wie das Erstellen für mehrere Laufzeitumgebungen oder das Anvisieren mehrerer Versionen einer Hostanwendung von einem einzigen Projekt aus.

Ausführliche Informationen dazu, wie dies mit Wiederherstellung und Pack funktioniert, finden Sie unter "Targeting multiple frameworks".

Siehe auch