Udostępnij za pomocą


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 lub msbuild /t:pack do utworzenia pakietu.

Uwaga / Notatka

nuget.exe interfejs wiersza polecenia nie obsługuje pakowania projektów w stylu zestawu SDK, więc należy używać tylko polecenia dotnet pack lub msbuild /t:pack. Zalecamy, aby uwzględnić wszystkie właściwości, które zwykle znajdują się w pliku .nuspec, w pliku projektu. Aby obsługiwać wiele wersji platformy .NET Framework w projekcie typu nie-SDK, zobacz Obsługa wielu wersji platformy .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>

    do:

    <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 TFM, możesz użyć #if NET45 lub #if NETSTANDARD2_0 aby oddzielić kod zależny od TFM. (Aby uzyskać więcej informacji, zobacz Jak wielokierunkowo docelować.) 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, do .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 i wynikowych pakietów .nupkg zarówno dla .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 także