2015-07-21 8 views
53

mam jakiś w ASP vnext mogę zdefiniować 3 rodzaje wykonywaniaProject.json definicja dnx451 vs .dotnet (4,51)

  • dnxCore
  • dnx451
  • DotNet

W Project.json wygląda to następująco:

"frameworks": 
{ 
    "dotnet": { }, 
    "dnx451": { }, 
    "dnxcore50": { } 
}^ 

i UI shors to

enter image description here

I przyjęto następujące założenia:

dnxCore jest nowy .NET Framework rdzenia.

DotNet jest poprzednia Runtime

dnx451: Czym różni się przy definiowaniu "DotNet" lub "dnx451" w project.json?

Nie należy uruchamiać jednocześnie z środowiskiem wykonawczym .net?

Również w zależności od tego, który szablon projektu wybiorę (vNext ClassLib lub vNext Console Lib) domyślnie zawiera jeden lub drugi.

Odpowiedz

69

Odpowiadając na pytanie w inny sposób: Biblioteka powinna kierować SDK środowisk, które jej wymagają. Jeśli nie potrzebujesz SDK, użyj netstandard (lub wcześniej .NET Core RC2 dotnet).

  • dnxcore50 DNX SDK działa na CoreCLR/CoreFx (przestarzałe, zamiast używać netcoreapp1.0).
  • dnx451 DNX SDK działający na .Net 4.5.1 (Desktop CLR/Full BCL i FCL) (przestarzały, zamiast tego użyj net451).
  • net46 .Net Framework 4.6 SDK działa na pulpicie CLR/Full BCL i FCL.
  • uap10.0 UWP Windows 10 SDK działający na .Net Native/CoreFx.
  • netcoreapp1.0. Zestaw SDK Core .NET Core 1.0 działający na CoreCLR/CoreFx.
  • netstandard1.5 (RC2, dotnet przed) dowolny czysty kod IL, który deklaruje swoje zależności (System.Runtime (oparte) biblioteki zamiast umów PCL). Zależności struktury są dostępne dla .Net 4.5.x, .NET Core lub UWP (zestaw bibliotek oparty na System.Runtime w różnych wersjach). Tak jak w RC2 dotnet jest przestarzałe, użyj zamiast tego netstandard.
  • (.NET Core 2.0, ~ JUN 2017) dowolny czysty kod IL, który opiera się wyłącznie na zestawie funkcji netstandard.dll, które muszą zostać wdrożone przez wszystkie platformy (.NET Core, .NET Framework, Xamarin, Mono, Unity3D) (lub rzuć wyjątek NotImplementedException). netstandard2.x to w przybliżeniu biblioteka BCL platformy .NET Framework (bez komponentów FCL, takich jak WMI, WinForm, WPF, WCF, WWF, ...). Przez podkładki kompatybilności większość istniejących pakietów NuGet automatycznie będzie netstandard2.0.

Jeśli twoja biblioteka ma tylko niektóre algorytmy lub nie jest specyficzna dla platformy, użyj netstandard/dotnet. Jeśli którakolwiek z twoich zależności jest ograniczona, ta zależność będzie propagować aż do aplikacji (na przykład DNX, UWP, .Net46), która z niej korzysta.

Mogę tylko podkreślić jak Malachiasz serię artykułów Oren. (napisał właśnie nowy: https://oren.codes/2015/07/29/targeting-net-core/ na ten sam temat).

ps: dotnet/netstandard nie jest konkretnym środowiskiem uruchomieniowym, jest to jego abstrakcja. Jest to cel, który w tym przypadku nie określa nawet środowiska uruchomieniowego, ale zamiast tego mówi: Wszystko, co poprawnie interpretuje IL. Na przykład: dnxcore5 jest celem, który określa SDK (DNX), który ma określone środowisko wykonawcze (CoreCLR). W tym przypadku możesz poczynić dalsze założenia dotyczące zachowania środowiska wykonawczego (takie jak użycie JIT, dostępność implementacji x-plat itp.).

pps: należy pamiętać, że nazwa dotnet została przekształcona w termin netstandard wraz z nadchodzącym wydaniem RC2. Kompletny pakiet DNX SDK został podzielony między zespoły .NET Core i ASP.NET. Dlatego też ramowy moniker dla .NET Core (CoreCLR/CoreFx) to netcoreapp1.0, podczas gdy 99% stosu ASP.NET to tylko biblioteki z netstandard1.5. Monikery DNX (dnx451 i dnxcore50) są przestarzałe. Podczas pracy ASP.NET Core na .NET Framework (zamiast .NET Core) użyj net451. Ciężki odczytu na szczegóły: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

PPP: continiously mieć świadomość, że pojęcie zamówień opartych zależność netstandard1.x nie został rozwinięty, ale zmienił się jeden (ogromne) standardowej umowy (32K API; netstandard2.0), który ma być realizowany przez wszystkich platformy obejmujące nadchodzący .NET Core 2.0. Ta zmiana ma tę zaletę, że większość istniejącego ekosystemu pakietu NuGet (który odnosi się do mscorlib i przyjaciół) może być zintegrowana z pakietami netstandard2.0 przy użyciu pośrednich podkładek kompatybilności.

+1

Czy są jakieś różnice/zalety odnoszące się do dnx46 przez net46? – Dealdiane

+1

Cóż ... Z net46 możesz użyć WinForm lub wpf lub wmi w swojej bibliotece. Z Dnx46 możesz używać ASP.net 5 w swojej bibliotece. Ale jeśli nie korzystasz z funkcji SDK, powinieneś kierować się na dotnet i pozwalając wszystkim potencjalnym aplikacjom docelowym ... W tym wpf i ASP.net 5 do korzystania z twojej biblioteki. – Thomas

+0

Dlaczego wywołać _dnxcore50_ zamiast _coreclr50_ lub _clr451_? – HashName

7

dotnet jest przeznaczony dla wielu kompatybilności .NET Core 4.6. reference link

"dotnet Jest to nowy .NET Core dla pakietów, które nie mają żadnych wymagań modelu aplikacji." - reference link

Więc przez te definicje DotNet jest nowy czas pracy, a nie poprzednia