Kiedy powinniśmy stosować jeden na drugim?
Decyzja jest kompromisem między zgodnością a dostępem do interfejsu API.
Użyj biblioteki .NET Standard, jeśli chcesz zwiększyć liczbę aplikacji, które będą kompatybilne z twoją biblioteką, i nie przeszkadza ci zmniejszenie powierzchni interfejsu API .NET, do którego biblioteka może uzyskać dostęp.
Użyj biblioteki .NET Core, jeśli chcesz zwiększyć obszar .NET API, do którego biblioteka może uzyskać dostęp, i możesz pozwolić, aby tylko aplikacje .NET Core były kompatybilne z twoją biblioteką.
Na przykład biblioteka kierowana na .NET Standard 1.3 będzie kompatybilna z aplikacjami ukierunkowanymi na .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 i dowolną inną platformą obsługującą .NET Standard 1.3. Biblioteka nie będzie jednak mieć dostępu do niektórych części interfejsu API .NET. Na przykład Microsoft.NETCore.CoreCLR
pakiet jest zgodny z .NET Core, ale nie z .NET Standard.
Jaka jest różnica między biblioteką klas (.NET Standard) a biblioteką klas (.NET Core)?
Sekcja Frameworki oparte na pakiecie opisuje różnicę.
Zgodność: biblioteki docelowe .NET Standard będą działać na dowolnym środowisku wykonawczym zgodnym z .NET Standard, takim jak .NET Core, .NET Framework, Mono / Xamarin. Z drugiej strony biblioteki docelowe .NET Core mogą działać tylko w środowisku uruchomieniowym .NET Core.
Obszar API: Standardowe biblioteki .NET są wyposażone we wszystko, NETStandard.Library
a biblioteki .NET Core mają wszystko Microsoft.NETCore.App
. Ta ostatnia zawiera około 20 dodatkowych bibliotek, z których niektóre możemy dodać ręcznie do naszej biblioteki .NET Standard (np. System.Threading.Thread
), A niektóre z nich nie są kompatybilne z .NET Standard (np. Microsoft.NETCore.CoreCLR
).
Ponadto biblioteki .NET Core określają środowisko wykonawcze i są dostarczane z modelem aplikacji. Jest to ważne na przykład, aby biblioteki klas testów jednostkowych mogły być uruchamiane.
Dlaczego oba istnieją?
Ignorując biblioteki przez chwilę, przyczyną istnienia .NET Standard jest przenośność; definiuje zestaw interfejsów API, które platformy .NET zgadzają się wdrożyć. Każda platforma, która implementuje .NET Standard, jest kompatybilna z bibliotekami ukierunkowanymi na ten .NET Standard. Jedną z tych kompatybilnych platform jest .NET Core.
Wracając do bibliotek, szablony bibliotek .NET Standard istnieją do uruchamiania w wielu środowiskach wykonawczych (kosztem powierzchni interfejsu API). I odwrotnie, istnieją szablony bibliotek .NET Core, aby uzyskać dostęp do większej powierzchni API (kosztem zgodności) i określić platformę, na której można zbudować plik wykonywalny.
Oto interaktywna matryca pokazująca, które .NET Standard obsługuje, które implementacje .NET i ile powierzchni API jest dostępne.