Freigeben über


Unterstützen mehrerer .NET Framework-Versionen 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.

Hinweis

nuget.exe CLI unterstützt das Packen von SDK-Stil-Projekten nicht, sodass Sie nur dotnet pack oder msbuild /t:pack nutzen sollten. Es wird empfohlen, dass Sie alle Eigenschaften einbeziehen, die sich normalerweise in der .nuspec Datei befinden, stattdessen in der Projektdatei. Informationen zum Ziel mehrerer .NET Framework-Versionen in einem Projekt im Nicht-SDK-Stil finden Sie unter Unterstützen mehrerer .NET Framework-Versionen.

Erstellen eines Projekts, das mehrere .NET Framework-Versionen 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>

Siehe auch