Was ist der Unterschied zwischen den neuen TFMs netstandardapp und netcoreapp?

73

Ich habe festgestellt, dass NuGet kürzlich Unterstützung für mehrere neue TFMs im Zusammenhang mit .NET Core hinzugefügt hat, darunter:

  • netstandard (1,0-1,5)
  • netstandardapp (1.5)
  • netcoreapp (1.0)

Nach meinem besten Wissen netstandardentspricht das .NET Core-Äquivalent einem tragbaren Profil. Sie können damit mehrere Plattformen mit einem einzigen Moniker ansprechen, anstatt jede von Ihnen unterstützte Plattform explizit zu formulieren, z portable-net45+netcore45+wp81.

Inzwischen ist laut diesem Dokument netstandardapp eher eine Konsolenanwendung in .NET Core; Es repräsentiert etwas, das jede .NET Core-Laufzeit (z. B. CoreCLR, CoreRT) hat.

Was genau netcoreappsoll dann sein? Ich habe hier das Tracking-Problem dafür gefunden, das unten einen Kommentar enthält, der irgendwie erklärt, was der Unterschied ist, aber ich verstehe nicht, was der Unterschied zwischen ist

NETStandard.Library + App-Hosts

und

.NET Core-Basisinstallation

ist. Könnte es mir bitte jemand erklären?

James Ko
quelle

Antworten:

39

Die .NET-Standardbibliothek ( netstandard ) ist eine konsistente Bibliothek für alle Anwendungsmodelle. .NET Core ( netcoreapp ) wird auf der .NET Standard Library ausgeführt und ist ein AppModel. Auf der GitHub-Seite antworten sie, was eine .NET Standard-Anwendung ist und was der Unterschied zu .NET Core ist ( https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-standard-applications.md ) und ( https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md )

UPDATE: Die .NETStandardapp ist veraltet. Die NETCore-App ersetzt sie ( https://github.com/NuGet/Home/issues/2524 ).

F: Was ist eine .NET Standard-Anwendung?
A: Eine .NET Standard-Anwendung ist eine Anwendung, die auf jeder .NET Core-Laufzeit ausgeführt werden kann: CoreCLR (aktuell) und .NETNative (zukünftig). Es kann auf einer von vielen .NET-Kernplattformen (Windows, OS X und Linux) ausgeführt werden. Es basiert auf dem Host, der von der angegebenen Laufzeit bereitgestellt wird. Es ist ein zusammensetzbares Framework, das aus den Paketen erstellt wird, von denen die Anwendung abhängt. Die Richtlinie zum Laden von Assemblys ermöglicht neuere Versionen von Abhängigkeiten ohne Anwendungskonfiguration (z. B. sind BindingRedirects nicht erforderlich).

F: Wie unterscheidet sich das von .NETCore? A: Das .NETCore-Zielframework repräsentiert Windows 8-, Windows 8.1- und Universal Windows Platform-Anwendungen. Aus Kompatibilitätsgründen kann dieser Moniker nicht für ".NET Core-Anwendungen" wiederverwendet werden. Die Markenüberschneidung ist unglücklich.

F: Wie unterscheidet sich das von .NETStandard?
A: Das NETStandard-Zielframework ist ein abstraktes Zielframework, das die API-Oberfläche vieler Frameworks und Plattformen darstellt. Daher können NETStandard-Assemblys auf jeder Plattform ausgeführt werden, die den von dieser Assembly anvisierten NETStandard unterstützt, z. B. .NET Desktop, Windows Phone, universelle Windows-Plattformanwendungen, .NET-Standardanwendungen usw. NETStandardApplication ist ein konkretes Zielframework, das ein einzelnes darstellt Plattform mit API-Oberfläche und Implementierung. .NET-Standardanwendungen können eigenständig ausgeführt werden. .NETStandard-Bibliotheken müssen für ein bestimmtes konkretes Zielframework veröffentlicht oder verwendet werden, um in dieser Art von Anwendung verwendet zu werden.

Überblick über .NET Future Innovation

Martijn van Put
quelle
6
Können Sie Ihre Antwort entfernen oder zumindest ändern? netstandardapp ist tot. Siehe die andere Antwort.
Thomas
1
Die Antwort, dass .NETStandardapp veraltet ist und NETCoreapp sie ersetzt, wurde aktualisiert. Danke
Martijn van Put
1
Warum um alles in der Welt bekomme ich beim Erstellen eines Projekts "Klassenbibliothek (.NET Core)" einen Verweis darauf .NETStandard?
Simon_Weaver
Warum repräsentiert das .NET Core-Zielframework Windows 8-, Windows 8.1- und Universal Windows Platform-Anwendungen? Ist .NET Core nicht portabel? Was ist der Unterschied zwischen den Netcore- und Netcoreapp- TFMs überhaupt?
Rosberg Linhares
1
Es gibt kein Netcore-TFM. Es gibt also keinen Unterschied. Ja. .NET Core ist plattformübergreifend. Die Antwort ist ein wenig veraltet, also werde ich sie aktualisieren.
Martijn van Put
20

Was ist der Unterschied zwischen den neuen TFMs netstandardapp und netcoreapp?

netstandardappist veraltet, netcoreappersetzt es.

Was genau soll netcoreapp sein?

netcoreappist der Ziel-Framework-Moniker für die .NET Core Platform. Wenn Sie netcoreappden Framework-Abschnitt Ihrer project.json erweitern, wird ein Build Ihrer App unter .NET Core ausgeführt.

Ich verstehe nicht, was der Unterschied zwischen NETStandard.Library + App-Hosts und der .NET Core-Basisinstallation ist. Könnte es mir bitte jemand erklären?

NETStandard.Library + App-Hosts ist das NetStandard.App-Paket. Verwenden Sie dies nicht - es ist tot. Es enthält drei App-Host-Pakete und die Standardbibliothek.

  • Microsoft.NETCore.DotNetHostPolicy
  • Microsoft.NETCore.Platforms
  • Microsoft.NETCore.Runtime
  • NETStandard.Library

Die NET Core-Basisinstallation ist das Microsoft.NetCore.App-Paket. Verwenden Sie dies stattdessen. Es hält zwei der oben genannten Pakete, Fetzen zwei von ihnen, und fügt etwa 37 zusätzliche Microsoft.*und System.*Pakete.

  • Zusätzliche Microsoft.*Baugruppen
  • Microsoft.NETCore.DotNetHostPolicy
  • Microsoft.NETCore.Platforms <----- Im April 2016 wurden diese beiden
  • Microsoft.NETCore.Runtime <------- Teil der NETStandard.Library.
  • NETStandard.Library
  • Zusätzliche System.*Baugruppen

Verweise

https://github.com/NuGet/Home/issues/2524 > Gibt an, dass der Moniker für das netstandardapp-Zielframework "nicht mehr gültig" ist.

https://github.com/dotnet/cli/issues/2482 > Gibt an, dass "Projekte, die auf NetStandardApp abzielen, auf NetCoreApp portiert werden müssen. NetStandardApp wird von CLI 1.0.0 RC2 nicht unterstützt."

https://www.myget.org/feed/aspnetvnext/package/nuget/NETStandard.Library > Der Paketverlauf zeigt die große Änderung im April 2016.

Shaun Luttin
quelle
11
Wenn Sie Dinge im Quellcode visualisieren möchten , werden Sie damit zufrieden sein: gist.github.com/davidfowl/8939f305567e1755412d6dc0b8baf1b7 . Dieser Kern wurde vom Architekten von ASP.NET Core erstellt.
Thomas
@ Thomas: Sehr schöner Link. Kurz aber sehr informativ.
Stefan Steiger