.NET Standard

.NET Standard to formalna specyfikacja interfejsów API .NET, które są dostępne w wielu implementacjach .NET. Motywacją do .NET Standard było ustanowienie większej jednolityości w ekosystemie .NET. .NET 5 i nowsze wersje przyjmują inne podejście do ustanawiania jednolitych zasad, które eliminują potrzebę .NET Standard w większości scenariuszy. Jeśli jednak chcesz udostępnić kod między programem .NET Framework i dowolną inną implementacją .NET, taką jak .NET Core, biblioteka powinna być ukierunkowana na .NET Standard 2.0. Nie zostaną wydane żadne nowe .NET Standard, ale program .NET 5, .NET 6 i wszystkie przyszłe wersje będą nadal obsługiwać program .NET Standard 2.1 i starsze.

Aby uzyskać informacje o wybieraniu między platformami .NET 5+ i .NET Standard, zobacz .NET 5+ i .NET Standard w dalszej części tego artykułu.

.NET Standard wersji

.NET Standard jest wersjonarowany. Każda nowa wersja dodaje więcej interfejsów API. Gdy biblioteka jest budowana na podstawie określonej wersji programu .NET Standard, może działać w dowolnej implementacji .NET, która implementuje tę wersję .NET Standard (lub nowszą).

Zastosowanie wyższego .NET Standard umożliwia bibliotece korzystanie z większej liczby interfejsów API, ale oznacza, że można jej używać tylko w najnowszych wersjach programu .NET. Ukierunkowanie na niższą wersję zmniejsza liczbę dostępnych interfejsów API, ale oznacza, że biblioteka może działać w większej liczby miejsc.

Wybierz .NET Standard wersji

.NET Standard 1.0 ma 7949 z 37 118 dostępnych interfejsów API.

Implementacja programu .NET Obsługa wersji
.NET i .NET Core 1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Mono 4.6, 5.4, 6.4
Xamarin.iOS 10.0, 10.14, 12.16
Xamarin.Mac 3.0, 3.8, 5.16
Xamarin.Android 7.0, 8.0, 10.0
Platforma uniwersalna systemu Windows 8.0, 8.1, 10.0, 10.0.16299, TBD
Unity 2018.1

Aby uzyskać więcej informacji, zobacz .NET Standard 1.0. Aby uzyskać interaktywną tabelę, zobacz .NET Standard wersji.

Która .NET Standard docelowa

Zalecamy używanie wersji .NET Standard 2.0, chyba że jest potrzebna obsługa starszej wersji. Większość bibliotek ogólnego przeznaczenia nie powinna wymagać interfejsów API poza .NET Standard 2.0. .NET Standard 2.0 jest obsługiwana przez wszystkie nowoczesne platformy i jest zalecanym sposobem obsługi wielu platform z jednym obiektem docelowym.

Jeśli musisz obsługiwać .NET Standard 1.x, zalecamy również użycie wersji docelowej .NET Standard 2.0. .NET Standard 1.x jest dystrybuowany jako szczegółowy zestaw pakietów NuGet, co tworzy duży wykres zależności pakietów i powoduje, że deweloperzy pobierają wiele pakietów podczas budowania. Aby uzyskać więcej informacji, zobacz Platform targeting and .NET 5+ and .NET Standard w dalszej części tego artykułu.

.NET Standard reguły wersji

Istnieją dwie podstawowe reguły kontroli wersji:

  • Addytywne: .NET Standard są logicznie koncentrycznych okręgów: wyższe wersje zawierają wszystkie interfejsy API z poprzednich wersji. Nie ma żadnych zmian przełomowych między wersjami.
  • Niezmienne: po wysłaniu .NET Standard są zablokowane.

Nie będzie żadnych nowych wersji .NET Standard wersji po wersji 2.1. Aby uzyskać więcej informacji, zobacz .NET 5+ i .NET Standard w dalszej części tego artykułu.

Specyfikacja

Specyfikacja .NET Standard to standardowy zestaw interfejsów API. Specyfikacja jest utrzymywana przez implementatorów platformy .NET, w szczególności przez firmę Microsoft (w tym .NET Framework, .NET Core i Mono) oraz Unity.

Oficjalne artefakty

Oficjalna specyfikacja to zestaw plików cs , które definiują interfejsy API, które są częścią standardu. Katalog ref w (zarchiwizowany) repozytorium dotnet/standard definiuje .NET Standard API.

Metapakiet NETStandard.Library(źródło) opisuje zestaw bibliotek, które definiują (w części) jedną lub więcej .NET Standard wersji.

Dany składnik, taki jak System.Runtime, opisuje:

  • Część .NET Standard (tylko jej zakres).
  • Wiele wersji .NET Standard dla tego zakresu.

Pochodne artefakty są udostępniane w celu umożliwienia wygodniejszego odczytywania i włączania niektórych scenariuszy deweloperskich (na przykład przy użyciu kompilatora).

Reprezentacja pakietu

Podstawowym pojazdem dystrybucji dla zestawów .NET Standard odwołania jest NuGet pakietów. Implementacje są dostarczane na różne sposoby, odpowiednie dla każdej implementacji .NET.

NuGet są kierowane do co najmniej jednej struktury. .NET Standard są kierowane do .NET Standard ".NET Standard". Platformę docelową dla .NET Standard można kierować przy użyciu compact netstandardnetstandard (na przykład netstandard1.4). Biblioteki przeznaczone do uruchamiania w wielu implementacjach programu .NET powinny być przeznaczone dla tej struktury. W przypadku najszerszego zestawu interfejsów API należy określić cel, netstandard2.0 ponieważ liczba dostępnych interfejsów API między 1.6 .NET Standard 2.0 a 2.0.

Metapakiet NETStandard.Library odwołuje się do pełnego zestawu pakietów NuGet, które definiują .NET Standard. Najczęstszym sposobem działania obiektu docelowego netstandard jest odwołanie się do tego metapakiet. Opisuje on i zapewnia dostęp do około 40 bibliotek .NET i skojarzonych interfejsów API, które definiują .NET Standard. Możesz odwoływać się do dodatkowych pakietów docelowych, netstandard aby uzyskać dostęp do dodatkowych interfejsów API.

Przechowywanie wersji

Specyfikacja nie jest pojedynczej, ale liniowo wersjonalna zestaw interfejsów API. Pierwsza wersja standardu ustanawia podstawowy zestaw interfejsów API. Kolejne wersje dodają interfejsy API i dziedziczą interfejsy API zdefiniowane przez poprzednie wersje. Nie ma ustalonego aprowizowania usuwania interfejsów API ze standardu.

.NET Standard nie jest specyficzna dla żadnej z implementacji .NET ani nie pasuje do schematu wersji dowolnej z tych implementacji.

Jak wspomniano wcześniej, nie będzie żadnych nowych wersji .NET Standard wersji po wersji 2.1.

Wartość .NET Standard

Biblioteki .NET Standard można tworzyć przy użyciu kombinacji struktury i NETStandard.Library metapakiet.

.NET Framework tryb zgodności

Począwszy od .NET Standard 2.0 wprowadzono .NET Framework zgodności. Ten tryb zgodności umożliwia .NET Standard odwoływać się do bibliotek .NET Framework tak, jakby zostały skompilowane dla .NET Standard. Odwołania .NET Framework nie działają we wszystkich projektach, takich jak biblioteki, które używają interfejsów API Windows Presentation Foundation (WPF).

Aby uzyskać więcej informacji, zobacz .NET Framework tryb zgodności.

.NET Standard biblioteki i Visual Studio

Aby utworzyć biblioteki .NET Standard w programie Visual Studio, upewnij się, że na komputerze zainstalowano program Visual Studio 2022, Visual Studio 2019 lub Visual Studio 2017 w wersji 15.Windows 3 lub nowszej albo Visual Studio dla komputerów Mac w wersji 7.1 lub nowszej zainstalowanej w systemie macOS.

Jeśli w swoich projektach .NET Standard tylko biblioteki w .NET Standard 2.0, możesz to zrobić również w Visual Studio 2015 r. Należy jednak zainstalować NuGet 3.6 lub jego wyższą. Klienta aplikacji dla NuGet 2015 Visual Studio 2015 można pobrać ze NuGet pobierania.

.NET 5+ i .NET Standard

.NET 5 i .NET 6 to pojedyncze produkty z jednolitym zestawem funkcji i interfejsów API, których można używać w aplikacjach klasycznych platformy Windows oraz międzyplatformowych aplikacjach konsolowych, usługach w chmurze i witrynach internetowych. Na przykład program .NET 5 TFM odzwierciedla ten szeroki zakres scenariuszy:

  • net5.0

    Ten program TFM jest dla kodu, który działa wszędzie. Z kilkoma wyjątkami obejmuje tylko technologie, które działają na różnych platformach. W przypadku kodu .NET 5 program net5.0 zastępuje zarówno program netcoreapp TFM, jak netstandard i program TFM.

  • net5.0-windows

    Jest to przykład programu TFM specyficznego dla systemu operacyjnego, który dodaje funkcje specyficzne dla systemu operacyjnego do wszystkiego, co się odnosi.

Kiedy należy kierować net5.0 lub net6.0 a netstandard

W przypadku istniejącego kodu, który jest netstandardprzeznaczony dla programu , nie ma potrzeby zmieniania serwera TFM na net5.0 lub net6.0. .NET 5 i .NET 6 implementują .NET Standard 2.1 i starsze. Jedynym powodem przekierowania z programu .NET Standard do programu .NET 5+ jest uzyskanie dostępu do większej liczby funkcji środowiska uruchomieniowego, funkcji języka lub interfejsów API. Aby na przykład używać języka C# 9, należy użyć programu .NET 5 lub nowszej wersji. Aby uzyskać dostęp do nowszej funkcji i nadal mieć bibliotekę dostępną dla innych implementacji .NET, można użyć wieloadysgetowej wersji .NET 5 lub .NET 6 i programu .NET Standard.

Oto kilka wskazówek dotyczących nowego kodu dla programu .NET 5+:

  • Składniki aplikacji

    Jeśli używasz bibliotek do dzielenia aplikacji na kilka składników, zalecamy użycie obiektu docelowego lub net5.0net6.0. Dla uproszczenia najlepszym rozwiązaniem jest utrzymanie wszystkich projektów, które sprawiają, że aplikacja jest w tej samej wersji programu .NET. Następnie można wszędzie zakładać te same funkcje listy BCL.

  • Biblioteki wielokrotnego użytku

    W przypadku tworzenia bibliotek wielokrotnego użytku, które planujesz wysyłać NuGet, weź pod uwagę różnicę między zasięgiem a dostępnym zestawem funkcji. .NET Standard 2.0 to najnowsza wersja obsługiwana przez program .NET Framework, więc zapewnia dobry zasięg przy użyciu dość dużego zestawu funkcji. Nie zalecamy określania wartości docelowej .NET Standard 1.x, ponieważ zestaw dostępnych funkcji zostałby ograniczany przy minimalnym zwiększeniu zasięgu.

    Jeśli nie potrzebujesz obsługi tych .NET Framework, możesz przejść do .NET Standard 2.1 lub .NET 5/6. Zalecamy pominięcie .NET Standard 2.1 i przejście bezpośrednio do .NET 6. Najczęściej używane biblioteki będą wieloużołowe dla .NET Standard 2.0 i .NET 5+. Obsługa programu .NET Standard 2.0 zapewnia najbardziej zasięg, a obsługa platformy .NET 5+ zapewnia możliwość korzystania z najnowszych funkcji platformy dla klientów, którzy już znajdują się na platformie .NET 5+.

.NET Standard problemy

Poniżej podano niektóre problemy z .NET Standard które pomagają wyjaśnić, dlaczego program .NET 5 i nowsze wersje są lepszym sposobem udostępniania kodu między platformami i obciążeniami:

  • Powolne dodawanie nowych interfejsów API

    .NET Standard został utworzony jako zestaw interfejsów API, który musiałby obsługiwać wszystkie implementacje platformy .NET, dlatego został utworzony proces przeglądu propozycji dodania nowych interfejsów API. Celem było standaryzacja tylko interfejsów API, które można zaimplementować na wszystkich bieżących i przyszłych platformach .NET. W wyniku tego w przypadku pominięcia określonej wersji przez funkcję może być konieczne odczekanie kilku lat, zanim zostanie ona dodana do wersji standardowej. Następnie należy poczekać jeszcze dłużej, aż nowa wersja .NET Standard będzie szeroko obsługiwana.

    Rozwiązanie na .NET 5+: Zaimplementowana funkcja jest już dostępna dla każdej aplikacji i biblioteki .NET 5+, ponieważ baza kodu jest udostępniana. A ponieważ nie ma różnicy między specyfikacją interfejsu API i jej implementacją, możesz korzystać z nowych funkcji znacznie szybciej niż w przypadku .NET Standard.

  • Złożona wersja

    Oddzielenie specyfikacji interfejsu API od jej implementacji powoduje złożone mapowanie między wersjami specyfikacji interfejsu API i wersjami implementacji. Ta złożoność jest widoczna w tabeli przedstawionej wcześniej w tym artykule oraz w instrukcjach jej interpretacji.

    Rozwiązanie na .NET 5+: Nie ma separacji między specyfikacją interfejsu API platformy .NET 5+ i jej implementacją. Wynikiem jest uproszczony schemat TFM. Istnieje jeden prefiks TFM dla wszystkich obciążeń: net5.0net6.0 lub jest używany dla bibliotek, aplikacji konsolowych i aplikacji internetowych. Jedyną odmianą jest sufiks określający interfejsy API specyficzne dla platformy dla określonej platformy, takie jak lub net6.0-windows. Dzięki tej konwencji nazewnictwa tfm można łatwo określić, czy danej aplikacji można używać danej biblioteki. Nie jest potrzebna żadna tabela odpowiedników numeru .NET Standard, jak ta, w .NET Standard wersji.

  • Wyjątki nieobsługiwane przez platformę w czasie uruchamiania

    .NET Standard uwidacznia interfejsy API specyficzne dla platformy. Kod może zostać skompilowany bez błędów i wygląda na przenośny na dowolną platformę, nawet jeśli nie jest przenośny. W przypadku uruchamiania na platformie, która nie ma implementacji dla danego interfejsu API, występują błędy czasu wykonywania.

    Rozwiązanie na .NET 5+: Zestawy SDK .NET 5+ zawierają analizatory kodu, które są domyślnie włączone. Analizator zgodności platformy wykrywa przypadkowe użycie interfejsów API, które nie są obsługiwane na platformach, na których zamierzasz działać. Aby uzyskać więcej informacji, zobacz Analizator zgodności platformy.

.NET Standard przestarzałe

.NET Standard jest nadal potrzebny w przypadku bibliotek, które mogą być używane przez wiele implementacji .NET. Zalecamy stosowanie docelowych .NET Standard w następujących scenariuszach:

  • Użyj netstandard2.0 , aby udostępnić kod między .NET Framework i wszystkimi innymi implementacjami programu .NET.
  • Użyj , netstandard2.1 aby udostępnić kod między mono, Xamarin i .NET Core 3.x.

Zobacz też