Udostępnij za pośrednictwem


Obsługa wielu platform .NET 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.

Tworzenie projektu obsługującego wiele platform .NET

  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>

Wieloplatformowość z zduplikowanymi frameworkami

Począwszy od NuGet 7.6 / .NET SDK 10.0.300, możesz użyć wielu wartości TargetFrameworks, które odwołują się do tej samej podstawowej platformy. To umożliwia scenariusze, takie jak kompilowanie dla wielu środowisk uruchomieniowych lub dostosowywanie do wielu wersji aplikacji hosta z jednego projektu.

Aby uzyskać szczegółowe informacje na temat sposobu pracy z przywracaniem i pakowaniem, zobacz Ukierunkowanie na wiele frameworków.

Zobacz także