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
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.
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).
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 } }
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
PropertyGroup
elementu lub umieścić właściwości NuGet w innym pliku i użyć dyrektywy MSBuildImport
, aby ją uwzględnić.Directory.Build.Props
iDirectory.Build.Targets
są również obsługiwane począwszy od msBuild 15.0.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>