Unterstützung für mehrere .NET Framework-Versionen in der ProjektdateiSupport multiple .NET Framework versions in your project file

Wenn Sie zum ersten Mal ein Projekt erstellen, empfehlen wir Ihnen, eine .NET Standard-Klassenbibliothek zu erstellen, da sie mit den meisten Projekten kompatibel ist.When you first create a project, we recommend you create a .NET Standard class library, as it provides compatibility with the widest range of consuming projects. Durch die Verwendung von .NET Standard fügen Sie standardmäßig plattformübergreifende Unterstützung zu einer .NET-Bibliothek hinzu.By using .NET Standard, you add cross-platform support to a .NET library by default. In einigen Szenarien müssen Sie jedoch möglicherweise auch Code einbeziehen, der auf ein bestimmtes Framework abzielt.However, in some scenarios, you may also need to include code that targets a particular framework. In diesem Artikel erfahren Sie, wie Sie dabei für Projekte im SDK-Stil vorgehen.This article shows you how to do that for SDK-style projects.

Für Projekte im SDK-Stil können Sie die Unterstützung für mehrere Zielframeworks (TFM) in der Projektdatei konfigurieren und dann dotnet pack oder msbuild /t:pack verwenden, um das Paket zu erstellen.For SDK-style projects, you can configure support for multiple targets frameworks (TFM) in your project file, then use dotnet pack or msbuild /t:pack to create the package.

Hinweis

Die nuget.exe-CLI unterstützt nicht das Packen von Projekten im SDK-Stil. Daher sollten Sie nur dotnet pack oder msbuild /t:pack verwenden.nuget.exe CLI does not support packing SDK-style projects, so you should only use dotnet pack or msbuild /t:pack. Wir empfehlen, dass Sie stattdessen alle Eigenschaften einbeziehen, die sich normalerweise in der .nuspec-Datei in der Projektdatei befinden.We recommend that you include all the properties that are usually in the .nuspec file in the project file instead. Wenn Sie mehrere .NET Framework-Versionen in einem Projekt im Nicht-SDK-Stil als Ziel verwenden möchten, finden Sie weitere Informationen unter Unterstützen mehrerer .NET Framework-Versionen.To target multiple .NET Framework versions in a non-SDK-style project, see Supporting multiple .NET Framework versions.

Erstellen eines Projekts, das mehrere .NET Framework-Versionen unterstütztCreate a project that supports multiple .NET Framework versions

  1. Erstellen Sie eine neue .NET Standard-Klassenbibliothek in Visual Studio, oder verwenden Sie dotnet new classlib.Create a new .NET Standard class library either in Visual Studio or use dotnet new classlib.

    Es wird empfohlen, dass Sie eine .NET Standard-Klassenbibliothek erstellen, um die bestmögliche Kompatibilität zu erzielen.We recommend that you create a .NET Standard class library for best compatibility.

  2. Bearbeiten Sie die CSPROJ-Datei, damit diese das Zielframe unterstützt.Edit the .csproj file to support the target frameworks. Ändern Sie beispielsweiseFor example, change

    <TargetFramework>netstandard2.0</TargetFramework>

    in:to:

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

    Stellen Sie sicher, dass Sie das XML-Element ändern, das von Singular auf Plural geändert wurde (fügen Sie das „s“ sowohl zu den geöffneten als auch zu den schließenden Tags hinzu).Make sure that you change the XML element changed from singular to plural (add the "s" to both the open and close tags).

  3. Wenn Sie einen Code haben, der nur in einem TFM funktioniert, können Sie mit #if NET45 oder #if NETSTANDARD2_0 den TFM-abhängigen Code trennen.If you have any code that only works in one TFM, you can use #if NET45 or #if NETSTANDARD2_0 to separate TFM-dependent code. (Weitere Informationen finden Sie unter So legen Sie die Zielversion fest.) Verwenden Sie z.B. den folgenden Code:(For more information, see How to multitarget.) For example, you can use the following code:

    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 zur CSPROJ-Datei als MSBuild-Eigenschaften hinzu.Add any NuGet metadata you want to the .csproj as MSBuild properties.

    Eine Liste der verfügbaren Paketmetadaten und der Namen der MSBuild-Eigenschaften finden Sie unterPaketziel.For the list of available package metadata and the MSBuild property names, see pack target. Weitere Informationen finden Sie zudem unter Steuern von Abhängigkeitsobjekten.Also see Controlling dependency assets.

    Wenn Sie die Build-bezogenen Eigenschaften von den NuGet-Metadaten trennen möchten, können Sie eine andere PropertyGroup verwenden oder die NuGet-Eigenschaften in eine andere Datei einfügen und die MSBuild-Anweisung Import verwenden, um sie einzubinden.If you want to separate build-related properties from NuGet metadata, you can use a different PropertyGroup, or put the NuGet properties in another file and use MSBuild's Import directive to include it. Ab .NET Framework 15.0 werden Directory.Build.Props und Directory.Build.Targets ebenfalls unterstützt.Directory.Build.Props and Directory.Build.Targets are also supported starting with MSBuild 15.0.

  5. Verwenden Sie jetzt dotnet pack, und die daraus resultierende NUPKG-Datei ist sowohl auf .NET Standard 2.0 als auch .NET Framework 4.5 ausgerichtet.Now, use dotnet pack and the resulting .nupkg targets both .NET Standard 2.0 and .NET Framework 4.5.

Hier ist die CSPROJ-Datei, die mit den vorherigen Schritten und dem .NET Core SDK 2.2 generiert wird.Here is the .csproj file that is generated using the preceding steps and .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>

Siehe auchSee also