2015-07-21 11 views
53

Ich habe einige In asp vNext I 3 Arten von Laufzeit definierenProject.json Definition dnx451 vs .dotnet (4,51)

  • dnxCore
  • dnx451
  • Dotnet

In Project.json sieht es so aus:

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

und die ui shors

enter image description here

Ich gehe davon aus dem folgenden:

dnxCore ist der neue .net-Kern-Rahmen.

Dotnet ist die vorherige Laufzeit

dnx451: Was unterscheidet bei der Definition von "dotnet" oder "dnx451" im project.json?

Sollten nicht beide mit der .net Ausführungslaufzeit ausgeführt werden?

Auch abhängig davon, welche Projektvorlage ich wähle (vNext ClassLib oder vNext Console Lib) Standard enthält das eine oder das andere.

Antwort

69

beantworten Ihre Frage in einer anderen Art und Weise: Eine Bibliothek sollte Umgebungen Ziel, das SDK seine erfordert. Wenn Sie kein SDK benötigen, verwenden Sie netstandard (oder vor .NET Core RC2 dotnet).

  • dnxcore50 DNX SDK auf CoreCLR/CoreFx läuft (veraltet, verwenden netcoreapp1.0 statt).
  • dnx451 DNX SDK auf .Net 4.5.1 (Desktop-CLR/Full BCL und FCL) läuft (veraltet, verwenden net451 statt).
  • net46. Net Framework 4.6 SDK auf Desktop CLR/Full BCL und FCL ausgeführt.
  • uap10.0 UWP Windows 10 SDK läuft auf. Net Native/CoreFx.
  • netcoreapp1.0 .NET Core 1.0 SDK, das auf CoreCLR/CoreFx ausgeführt wird.
  • netstandard1.5 (RC2, dotnet vorher) irgendein reiner IL-Code, der seine Abhängigkeiten deklariert (System.Runtime (basierte) Bibliotheken anstelle von PCL-Verträgen). Framework-Abhängigkeiten sind ab .NET 4.5.x, .NET Core oder UWP (System.Runtime-basierte Bibliothek in verschiedenen Versionen) verfügbar. Wie bei RC2 dotnet veraltet ist, verwenden Sie stattdessen netstandard.
  • netstandard2.0 (.NET Core 2.0; ~ JUN 2017) alle reinen IL-Code, die ausschließlich von dem Feature-Set der netstandard.dll, die alle Plattformen (.NET Core, .NET Framework, Xamarin, Mono, Unity3D) implementieren müssen (oder werfen NotImplementedException). Die netstandard2.x ist ungefähr die BCL-Bibliothek von .NET Framework (ohne FCL-Komponenten wie WMI, WinForms, WPF, WCF, WWF, ...). Durch kompatible Shims werden die meisten bestehenden NuGet-Pakete automatisch netstandard2.0.

Also, wenn Ihre Bibliothek hat nur einige Algorithmen oder ist auf der Plattform nicht spezifisch, verwenden netstandard/dotnet. Wenn eine Ihrer Abhängigkeiten eingeschränkt ist, wird diese Abhängigkeit an die Anwendung weitergegeben (z. B. DNX, UWP, .Net46), die sie verwendet.

Ich kann nur wie Malachi die Artikelserie von Oren hervorheben. (Er schrieb gerade einen neuen: https://oren.codes/2015/07/29/targeting-net-core/ zum selben Thema).

ps: dotnet/netstandard ist keine konkrete Laufzeit es ist die Abstraktion davon. Es ist ein Ziel, das in diesem Fall nicht einmal eine Laufzeit spezifiziert, sondern stattdessen sagt: Alles, was IL richtig interpretiert, geht. Beispielsweise ist dnxcore5 ein Ziel, das ein SDK (DNX) angibt, das eine bestimmte Laufzeit (CoreCLR) hat. In diesem Fall können Sie weitere Annahmen über das Laufzeitverhalten treffen (zB Verwendung von JIT, Verfügbarkeit von x-plat-Implementierung, etc.).

pps: beachten Sie, dass der Name dotnet mit dem kommenden RC2-Release in den Begriff netstandard umgewandelt wurde. Auch das komplette DNX SDK wurde zwischen den .NET Core und ASP.NET Teams aufgeteilt. Daher ist der Framework-Moniker für .NET Core (CoreCLR/CoreFx) netcoreapp1.0, während 99% des ASP.NET-Stacks nur Bibliotheken mit netstandard1.5 sind. Die DNX-Moniker (dnx451 und dnxcore50) waren veraltet. Wenn Sie ASP.NET Core auf .NET Framework (anstelle von .NET Core) ausführen, verwenden Sie net451. Schwere Lektüre für Details: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

PPPs: Kontinuierlich darüber im Klaren sein, dass die netstandard1.x Konzept der Abhängigkeit Kontrakte, wurde nicht weiter entwickelt, aber geändert zu einem (großen) Standardvertrag (32k APIs; netstandard2.0), die von allen werden muss umgesetzt Plattformen einschließlich des bevorstehenden .NET Core 2.0. Diese Änderung hat den Vorteil, dass die meisten der bestehenden Ökosystem von NuGet-Paket (die mscorlib und Freunde beziehen) in netstandard2.0 Pakete integriert werden können, indem eine Zwischenkompatibilität Shims verwendet.

+1

Gibt es einen Unterschied/Vorteil Referenzierung dnx46 über net46? – Dealdiane

+1

Nun ... Mit net46 können Sie winforms oder wpf oder wmi in Ihrer Bibliothek verwenden. Mit dnx46 können Sie ASP.net 5 in Ihrer Bibliothek verwenden. Wenn Sie jedoch keine SDK-Funktion verwenden, sollten Sie auf dotnet zielen und alle potenziellen Ziel-Apps zulassen ... Einschließlich wpf und ASP.net 5, um Ihre Bibliothek zu verwenden. – Thomas

+0

Warum nennen Sie _dnxcore50_ statt _coreclr50_ oder _clr451_? – HashName

7

dotnet zielt auf eine Reihe von .NET Core 4.6-Kompatibilitäten ab. reference link

"dotnet Dies ist der neue .NET Core für Pakete, die keine App-Modellanforderungen haben." - reference link

So von diesen Definitionen Dotnet ist die neue Laufzeit, nicht die vorherige

Verwandte Themen