Czytałem o różnicy między .NET Standard i .NET Core, ale tak naprawdę nie wiem, czym jest różnica, ani kiedy wybrać projekt biblioteki .NET Standard i kiedy wybrać projekt biblioteki .NET Core.
Przeczytałem, że .NET Standard ma zapewnić, że zestaw interfejsów API jest zawsze dostępny, bez względu na używaną platformę (o ile ta platforma jest kompatybilna z wybraną wersją .NET Standard). Jeśli się nie mylę, oznacza to, że mogę utworzyć bibliotekę klas .NET Standard, a następnie użyć jej na dowolnej platformie zgodnej z wybraną wersją .NET Standard.
Dzięki .NET Core przeczytałem, że jest on również przeznaczony do użytku na różnych platformach, więc jeśli wybiorę bibliotekę .NET Core, wydaje się, że mogę go używać na wielu platformach, podobnie jak .NET Standard.
Na koniec nie widzę różnicy. Kiedy powinienem użyć które? Jaka jest różnica między nimi?
źródło
Odpowiedzi:
Spróbuję wyjaśnić twoje wątpliwości i udzielić odpowiedzi Jonowi Skeetowi.
.NET Standard to specyfikacja , więc biblioteka skompilowana dla określonej wersji .NET Standard może być używana w różnych implementacjach .NET Standard.
Jak powiedziano w moim innym komentarzu, dobrą analogią do relacji między .NET Standard i innymi implementacjami .NET Standard (.NET Core, .NET Framework itp.) Jest sedno Davida Fowlera : Wersje .NET Standard są
Interfaces
, podczas gdy frameworki są implementacje tych interfejsów.Ten uproszczony schemat może pomóc zrozumieć ten związek:
Wszystkie elementy docelowe
NetCore10
mają dostęp doINetStandard15
interfejsów API iNetCore10
określonych interfejsów API (takich jakDotNetHostPolicy
).Oczywiście tej biblioteki nie można używać w różnych
INetStandard15
implementacjach (NetCore10
nie można jej konwertować naNetFramework462
lubMono46
).Jeśli zamiast tego potrzebują dostępu tylko do
INetStandard15
API (a target że specyfikacja zamiast ramy betonowej) biblioteki mogą być wykorzystane przez dowolną ramach którego Realizuje (NetCore10
,NetFramework462
etc.)Uwaga: w oryginalnej analogii David Fowler używał interfejsów zarówno dla wersji .NET Standard, jak i implementacji frameworków. Uważam, że używanie interfejsów i klas jest bardziej intuicyjne i lepiej odzwierciedla związek między specyfikacjami a konkretnymi implementacjami.
źródło
.NET Core to implementacja standardu .NET. Jest dostępny w wielu systemach operacyjnych, ale to nie to samo - istnieją również inne implementacje .NET Standard.
Jeśli więc utworzysz bibliotekę .NET Core, będzie ona miała dostęp do rzeczy, które są zaimplementowane w .NET Core, ale nie są częścią .NET Standard, a twoja biblioteka nie będzie kompatybilna z innymi implementacjami .NET Standard, takie jak Xamarin, Tizen, pełne środowisko pulpitu .NET itp.
W skrócie: aby osiągnąć maksymalną przenośność, ustaw bibliotekę na .NET Standard.
źródło
INetStandard16
.). Implementowane są .NET Core 1.0 i Mono 4.6INetStandard16
. Nie można przekonwertować .Net Core 1.0 na Mono 4.6 (i odwrotnie), ale wszystko, co używa,INetStandard16
będzie działać na oba. (Biblioteka .NET Core Class jest zasadniczo podzbiorem biblioteki .NET Framework, która zawiera tylko mniej interfejsów API. Trzymanie się biblioteki .NET Core Class utrudnia współużytkowanie kodu między środowiskami wykonawczymi. Ten kod może nie działać dla innego środowiska wykonawczego (Mono dla Xamarin), ponieważ nie ma potrzebnego interfejsu API. Aby rozwiązać ten problem, istnieje .NET Standard, który jest po prostu zestawem specyfikacji, który mówi ci, jakich interfejsów API możesz użyć . Głównym celem .NET Standard jest współdzielenie kodu między środowiskami wykonawczymi. Ważne jest, aby ta specyfikacja była implementowana przez wszystkie środowiska wykonawcze. (.NET Framework, .NET Core i Mono dla Xamarin).
Więc jeśli masz pewność, że będziesz używać swojej biblioteki tylko do projektów .NET Core, możesz zignorować .NET Standard, ale jeśli istnieje nawet niewielka szansa, że twój kod będzie używany przez .NET Framework lub Mono dla Xamarin, to lepiej trzymać się standardu .NET
Należy również pamiętać, że wyższe wersje .NET Standard zawierają więcej interfejsów API, ale niższe wersje są obsługiwane przez więcej platform. Dlatego jeśli utworzysz bibliotekę .NET Standard, którą chcesz udostępniać między środowiskami wykonawczymi, wybierz docelową najniższą wersję , jaką możesz uzyskać , co pomoże Ci dotrzeć do większości platform. Na przykład, jeśli chcesz uruchomić .NET Framework 4.5 i .NET Core 1.0, najwyższą dostępną wersją .NET Standard jest .NET Standard 1.1. Więcej informacji na ten temat można znaleźć w tej wspaniałej tabeli z dokumentacji .
PS: Również jeśli chcesz przekonwertować swoją bibliotekę do .NET Standard, narzędzie .NET Portability Analyzer może ci w tym pomóc.
źródło
.NET Standard to specyfikacja interfejsów API .NET, które mają być dostępne w implementacjach .NET. Umożliwia to zdefiniowanie jednolitego zestawu interfejsów API BCL dla wszystkich implementacji .NET.
.NET Core jest jedną z takich implementacji .NET Standard. .NET Framework to kolejna implementacja standardu .NET.
Zdjęcie z bloga .NET
Odpowiedź Federicos daje graficzny przegląd ewolucji każdego frameworka wraz z wersjami. Spójrz na poniższy schemat z Dokumentów Microsoft .
źródło
Powyższe, wraz z bardzo jasnym wyjaśnieniem większości rzeczy omówionych w tym pytaniu, można znaleźć w następującym niezwykle pomocnym artykule Microsoft (MSDN - wrzesień 2017 r.): .NET Standard - Demystifying .NET Core i .NET Standard
źródło
Miałeś na myśli .NET Framework? Ponieważ standard .NET to implementacje, takie jak .NET Framework, .NET Core i Xamarin.
Uwielbiam .NET Core, ponieważ możemy go hostować w systemie Linux (używam nginx z mojego doświadczenia). Różni się od platformy .NET, którą można hostować tylko w IIS. W takim przypadku możesz rozważyć budżet hostingowy (ponieważ serwer Windows jest dla mnie drogi).
W perspektywie środowiska programistycznego rdzeń .Net jest lekki. Możesz więc użyć VSCode, Sublime, dla IDE (nie tylko studio wizualne).
źródło
Mówiąc najprościej, standard .NET służy do pisania projektów bibliotek klas, które kompilują się do biblioteki dll. .NET Core może być wykorzystywany do tworzenia rzeczywistych aplikacji internetowych, które mogą działać we wszystkich systemach operacyjnych (Windows, Linux, MacOS). (W .NET Core 3 Microsoft zapewnia funkcjonalność do tworzenia aplikacji komputerowych przy użyciu WPF, ale do tej pory te aplikacje nie będą działały na różnych platformach i będą działały tylko w systemie Windows. W przyszłości Microsoft może uczynić je również wieloplatformowymi). bibliotek / bibliotek DLL można używać w dowolnej aplikacji korzystającej z .NET (.NET Framework, .NET Core), co oznacza, że możesz używać standardu .NET zarówno z .NET Framework, jak i .NET core.
źródło