Jaka jest różnica between.NET Rdzeń and.NET standardowe typy projektów biblioteki klas?

W Visual Studio istnieją co najmniej 3 różne typy bibliotek klas, które możesz utworzyć:

  • Class Library (. NET Framework)
  • Class Library (. NET Standard)
  • Class Library (. NET Core)

Podczas gdy pierwszy jest tym, czego używamy od lat, głównym punktem zamieszania, który mam, jest to, kiedy korzystać z bibliotek klas.NET Standard i. Net Core. Zostałem ugryziony przez to ostatnio podczas próby multi-target inny framework wersje i tworzące projekt testów jednostkowych.

Więc jaka jest różnica między Class Library (.NET Standard) i Class Library (.NET Core), Dlaczego oba istnieją i kiedy powinniśmy używać jednego nad drugim?

Author: Shaun Luttin, 2017-03-22

8 answers

Kiedy powinniśmy użyć jednego nad drugim?

[[6]}decyzja jest kompromisem między zgodnością A dostępem do API.

Użyj Biblioteki. NET Standard, jeśli chcesz zwiększyć liczbę aplikacji, które będą kompatybilne z Twoją biblioteką, i nie masz nic przeciwko zmniejszeniu powierzchni interfejsu.NET API, do której biblioteka może mieć dostęp.

Użyj Biblioteki. Net Core, gdy chcesz zwiększyć obszar powierzchni API. NET, do którego może uzyskać dostęp Twoja biblioteka, i nie masz nic przeciwko zezwoleniu tylko aplikacje. NET Core będą kompatybilne z Twoją biblioteką.

Na przykład Biblioteka obsługująca. NET Standard 1.3 będzie kompatybilna z aplikacjami obsługującymi. NET Framework 4.6,. Net Core 1.0, Universal Windows Platform 10.0 i każdą inną platformę obsługującą. NET Standard 1.3. Biblioteka nie będzie jednak miała dostępu do niektórych części API. NET. Na przykładMicrosoft.NETCore.CoreCLR Pakiet jest kompatybilny z. Net Core, ale nie ze standardem.NET.

Co to jest różnica między biblioteką klas (. NET Standard) A biblioteką klas (. NET Core)?

W sekcji Package-based frameworks opisano różnicę.

Kompatybilność: Biblioteki, których docelowy standard. NET będzie działał w dowolnym środowisku zgodnym ze standardem. NET, takim jak.Net Core,. NET Framework, Mono/Xamarin. Z drugiej strony biblioteki docelowe. NET Core mogą działać tylko w środowisku uruchomieniowym. NET Core.

Powierzchnia API: biblioteki. NET Standard są dostarczane z wszystko w NETStandard.Library, podczas gdy Biblioteki. NET Core zawierają wszystko w 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 nie są zgodne ze standardem. NET (np. Microsoft.NETCore.CoreCLR).

Ponadto, Biblioteki. NET core określają środowisko uruchomieniowe i są dostarczane z modelem aplikacji. Jest to ważne, na przykład, aby biblioteki klas testów jednostkowych były możliwe do uruchomienia.

Dlaczego oba istnieć?

Ignorując przez chwilę biblioteki, powodem istnienia standardu. NET jest przenośność; definiuje on zestaw interfejsów API, które platformy.NET zgadzają się zaimplementować. Każda platforma implementująca Standard. NET jest kompatybilna z bibliotekami, które kierują ten Standard. NET. Jedną z tych kompatybilnych Platform jest. net Core.

Wracając do bibliotek, szablony. NET Standard Library istnieją do uruchamiania w wielu środowiskach (kosztem powierzchni API). Awersowo. NET Podstawowe szablony bibliotek istnieją po to, aby uzyskać dostęp do większej powierzchni API (kosztem kompatybilności) i określić platformę, na której można zbudować plik wykonywalny.

 316
Author: Shaun Luttin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 17:31:38

A . Net Core Class Library jest zbudowana na standardzie . Net. Jeśli chcesz zaimplementować bibliotekę, która jest przenośna do . Net Framework ,.Net Core i Xamarin , Wybierz . Net Standard Library

. Net Core ostatecznie zaimplementuje. Net Standard 2 (podobnie jak Xamarin i . Net Framework)

. Net Core, Xamarin i . Net Framework można zatem określić jako smaki z . Net Standard

Aby zabezpieczyć swoje aplikacje do udostępniania kodu i ponownego użycia , wolisz zaimplementować Biblioteki. Net Standard.

Microsoft zaleca również użycie . Net Standardzamiast przenośnych bibliotek klas.

Aby cytować MSDN jako autorytatywne źródło, . Net Standard ma być jedną biblioteką do rządzenia nimi wszystkimi. Ponieważ zdjęcia są warte tysiąc słów, następujące rzeczy sprawią, że rzeczy bardzo jasne:

1. Twój obecny scenariusz aplikacji (fragmentaryczny)

Jak większość z nas, prawdopodobnie jesteś w sytuacji poniżej: (. NET Framework, Xamarin i obecnie. Net Core)

Tutaj wpisz opis obrazka

2. Co umożliwi Ci Biblioteka Standardowa. Net (kompatybilność cross-framework)

Implementacja standardowej biblioteki. Net pozwala na współdzielenie kodu pomiędzy smaki:

Jedna biblioteka do rządzenia nimi wszystkimi

Dla niecierpliwych:

  1. Standard. NET rozwiązuje problem udostępniania kodu dla programistów. net na wszystkich platformach, wprowadzając wszystkie interfejsy API, których oczekujesz i kochasz w środowiskach, których potrzebujesz: aplikacje komputerowe, aplikacje mobilne i gry oraz usługi w chmurze:]}
  2. . Net Standard jest zestawem interfejsów API, Które wszystkie platformy. NET muszą zaimplementować. To unifikuje. NET platformy i zapobiegają przyszłej fragmentacji.
  3. . Net Standard 2.0 zostanie zaimplementowany przez . NET Framework, .Net Core , i Xamarin . Dla . Net Core {[2] } spowoduje to dodanie wielu istniejących interfejsów API które zostały poproszone.
  4. . Net Standard 2.0 zawiera podkładkę kompatybilności dla . NET Framework binariów, znacznie zwiększając zestaw bibliotek, do których można odwoływać się ze standardu. NET biblioteki.
  5. . Net Standard zastąpi Przenośne biblioteki klas (PCLs) jako narzędzie do budowania wieloplatformowych bibliotek. NET.

Aby znaleźć tabelę, która pomoże Ci zrozumieć, na jakiej najwyższej wersji standardu.NET możesz kierować, na jakich platformach. NET zamierzasz działać, zajrzyj tutaj.

Źródła: MSDN: wprowadzenie standardu. Net

 202
Author: user919426,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 05:25:47

Więc krótka odpowiedź brzmiałaby:

IAnimal == .NetStandard (General)
ICat == .NetCore (Less General)
IDog == .NetFramework (Specific / oldest and has the most features)
 61
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-18 18:31:13

. Net Framework i . Net Core to dwie różne implementacje środowiska uruchomieniowego.Net. Zarówno Core, jak i Framework (ale szczególnie Framework) mają różne profile, które obejmują większe lub mniejsze (lub po prostu różne) wybory wielu interfejsów API i zestawów stworzonych przez Microsoft dla. Net, w zależności od tego, gdzie są zainstalowane i w jakim profilu. Na przykład w uniwersalnych aplikacjach Windows dostępne są różne interfejsy API niż w" normalnym " profilu systemu Windows. Parzyste w systemie Windows możesz mieć profil "Klient" vs profil "pełny". Ponadto istnieją inne implementacje (np. Mono), które mają własne zestawy bibliotek.

. Net Standard jest specyfikacją, dla której muszą być dostępne zestawy bibliotek API i zestawów. Aplikacja napisana dla. Net Standard 1.0 powinna być w stanie skompilować i uruchomić z dowolną wersją Framework, Core, Mono itp., która reklamuje obsługę kolekcji bibliotek. NET Standard 1.0. Podobne to prawda dla. Net Standard 1.1, 1.5, 1.6, 2.0 itd. Dopóki środowisko uruchomieniowe zapewnia obsługę tej wersji standardu, można tam kompilować i uruchamiać.

Projekt skierowany do wersji standardu nie będzie mógł korzystać z funkcji, które nie są zawarte w tej rewizji standardu. Nie oznacza to, że nie można przyjmować zależności od innych zestawów ani interfejsów API publikowanych przez innych dostawców (np. items on NuGet). Ale oznacza to, że wszelkie zależności, które przyjmujesz, muszą również obejmować wsparcie dla Twoja wersja. Net Standard. Standard. net rozwija się szybko, ale wciąż jest wystarczająco nowy i dba o niektóre z mniejszych profili runtime, że to ograniczenie może wydawać się przytłaczające.

Z drugiej strony, aplikacja ukierunkowana na Standard powinna być w stanie być używana w większej liczbie sytuacji wdrożeniowych, ponieważ teoretycznie może działać z Core, Framework, Mono itp. Dla projektu biblioteki klasowej poszukującego szerokiej dystrybucji, to atrakcyjna obietnica. Do projektu biblioteki klasowej używany głównie do celów wewnętrznych, może nie być tak dużym problemem.

. Net Standard może być również przydatny w sytuacjach, w których zespół SysAdmin chce się przenieść z ASP.Net na Windows do ASP.Net dla. Net Core na Linuksie ze względów filozoficznych lub kosztowych, ale zespół programistów chce kontynuować pracę przeciwko. Net Framework w Visual Studio Na Windows.

 46
Author: Joel Coehoorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-05 15:15:06

. Net Standard: pomyśl o tym jak o dużej bibliotece standardowej. Używając tego jako zależności możesz tworzyć tylko biblioteki (.Dll), a nie Pliki Wykonywalne. Biblioteka tworzona ze standardem. NET jako zależność może być dodana do Xamarin.Android, Xamarin.iOS, A. Net Core Windows/OSX/Linux project.

. Net Core: potraktuj to jako kontynuację starego. NET framework, po prostu jest to opensource i niektóre rzeczy nie są jeszcze zaimplementowane, a inne są przestarzałe. Rozszerza standard. NET o dodatkowe funkcje, ale działa tylko na komputerach stacjonarnych. Dodając to jako zależność, możesz tworzyć uruchamialne aplikacje w systemach Windows, Linux i OSX. (Chociaż konsola tylko na razie, brak GUI). Tak więc. Net Core=. Net Standard + Desktop specific stuff.
Również UWP z niego korzysta i nowe ASP.NET core używa go również jako zależności.

 6
Author: sydd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-26 03:45:45

. Net Standard istnieje głównie po to, aby poprawić współdzielenie kodu i uczynić API dostępnymi w każdej implementacji. Net bardziej spójnymi.

Podczas tworzenia bibliotek możemy mieć target as.Net Standard 2.0 tak, aby stworzona biblioteka była kompatybilna z różnymi wersjami. Net Framework w tym. Net Core,Mono..

 5
Author: ARP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-15 15:50:43

. NET Framework i. Net Core są frameworkami.

. Net Standard jest standardem (innymi słowy, specyfikacją).

Możesz wykonać projekt wykonywalny (jak aplikacja konsolowa, lub ASP.NET aplikacja) z. NET Framework i. Net Core, ale nie ze standardem.NET.

Ze standardem. NET można tworzyć tylko projekty biblioteki klas, które nie mogą być wykonywane samodzielnie i powinny być odwoływane przez inny projekt wykonywalny. Net Core lub. NET Framework.

 4
Author: bside,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 12:58:32

Mam nadzieję, że pomoże to zrozumieć relację Pomiędzy standardową powierzchnią API. NET A innymi platformami. NET . Każdy interfejs reprezentuje Framework docelowy, a metody reprezentują grupy API dostępnych w tym frameworku docelowym.

namespace Analogy
{
  // .NET Standard

interface INetStandard10
{
    void Primitives();
    void Reflection();
    void Tasks();
    void Xml();
    void Collections();
    void Linq();
}

interface INetStandard11 : INetStandard10
{
    void ConcurrentCollections();
    void LinqParallel();
    void Compression();
    void HttpClient();
}

interface INetStandard12 : INetStandard11
{
    void ThreadingTimer();
}

interface INetStandard13 : INetStandard12
{
    //.NET Standard 1.3 specific APIs
}

// And so on ...


// .NET Framework 

interface INetFramework45 : INetStandard11
{
    void FileSystem();
    void Console();
    void ThreadPool();
    void Crypto();
    void WebSockets();
    void Process();
    void Drawing();
    void SystemWeb();
    void WPF();
    void WindowsForms();
    void WCF();
}

interface INetFramework451 : INetFramework45, INetStandard12
{
    // .NET Framework 4.5.1 specific APIs
}

interface INetFramework452 : INetFramework451, INetStandard12
{
    // .NET Framework 4.5.2 specific APIs
}

interface INetFramework46 : INetFramework452, INetStandard13
{
    // .NET Framework 4.6 specific APIs
}

interface INetFramework461 : INetFramework46, INetStandard14
{
    // .NET Framework 4.6.1 specific APIs
}

interface INetFramework462 : INetFramework461, INetStandard15
{
    // .NET Framework 4.6.2 specific APIs
}

// .NET Core
interface INetCoreApp10 : INetStandard15
{
    // TODO: .NET Core 1.0 specific APIs
}
// Windows Universal Platform
interface IWindowsUniversalPlatform : INetStandard13
{
    void GPS();
    void Xaml();
}

// Xamarin 
interface IXamarinIOS : INetStandard15
{
    void AppleAPIs();
}

interface IXamarinAndroid : INetStandard15
{
    void GoogleAPIs();
}    
// Future platform

interface ISomeFuturePlatform : INetStandard13
{
    // A future platform chooses to implement a specific .NET Standard version.
    // All libraries that target that version are instantly compatible with this new
    // platform
}
}

Źródło

 1
Author: Mahbubur Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-01 13:28:49