Obsługa wielu wersji programu .NET Framework w pliku projektu

Podczas pierwszego tworzenia projektu zalecamy utworzenie biblioteki klas .NET Standard, ponieważ zapewnia ona zgodność z najszerszym zakresem projektów zużywających. Korzystając z platformy .NET Standard, domyślnie dodajesz obsługę międzyplatformową do biblioteki .NET. Jednak w niektórych scenariuszach może być również konieczne dołączenie kodu przeznaczonego dla określonej platformy. W tym artykule pokazano, jak to zrobić dla projektów w stylu zestawu SDK.

W przypadku projektów w stylu zestawu SDK można skonfigurować obsługę wielu platform docelowych (TFM) w pliku projektu, a następnie użyć dotnet pack polecenia lub msbuild /t:pack utworzyć pakiet.

Uwaga

nuget.exe interfejs wiersza polecenia nie obsługuje pakowania projektów w stylu zestawu SDK, dlatego należy używać tylko polecenia dotnet pack lub msbuild /t:pack. Zalecamy dołączenie wszystkich właściwości , które zwykle znajdują się w .nuspec pliku w pliku projektu. Aby kierować wiele wersji programu .NET Framework w projekcie w stylu innego niż ZESTAW SDK, zobacz Obsługa wielu wersji programu .NET Framework.

Tworzenie projektu obsługującego wiele wersji programu .NET Framework

  1. Utwórz nową bibliotekę klas .NET Standard w programie Visual Studio lub użyj polecenia dotnet new classlib.

    Zalecamy utworzenie biblioteki klas .NET Standard w celu uzyskania najlepszej zgodności.

  2. Edytuj plik csproj, aby obsługiwać platformy docelowe. Na przykład zmień

    <TargetFramework>netstandard2.0</TargetFramework>

    na:

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

    Upewnij się, że zmieniono element XML z liczby pojedynczej na liczbę mnogą (dodaj "s" do otwartych i zamkniętych tagów).

  3. Jeśli masz jakikolwiek kod, który działa tylko w jednym programie TFM, możesz użyć #if NET45 lub #if NETSTANDARD2_0 oddzielić kod zależny od serwera TFM. (Aby uzyskać więcej informacji, zobacz Jak wielotarget.) Można na przykład użyć następującego kodu:

    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. Dodaj wszystkie metadane NuGet, które chcesz umieścić w pliku csproj jako właściwości msBuild.

    Aby uzyskać listę dostępnych metadanych pakietu i nazwy właściwości MSBuild, zobacz element docelowy pakietu. Zobacz również Kontrolowanie zasobów zależności.

    Jeśli chcesz oddzielić właściwości związane z kompilacją od metadanych NuGet, możesz użyć innego PropertyGroupelementu lub umieścić właściwości NuGet w innym pliku i użyć dyrektywy MSBuild Import , aby ją uwzględnić. Directory.Build.Props i Directory.Build.Targets są również obsługiwane począwszy od msBuild 15.0.

  5. Teraz użyj dotnet pack elementów i wynikowych elementów docelowych .nupkg zarówno .NET Standard 2.0, jak i .NET Framework 4.5.

Oto plik csproj generowany przy użyciu powyższych kroków i zestawu .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>

Zobacz też