wake-up-neo.com

Ich bin verloren. Was ist mit ASP.NET MVC 5 passiert?

Ich habe meinen Kopf gesenkt, um an verschiedenen Projekten zu arbeiten, und anscheinend hat Microsoft einige große Änderungen vorgenommen, und es ist verdammt verwirrend für mich. ASP.NET Core kam zum ersten Mal auf mein Radar, als ich letztes Jahr Visual Studio 2017 installierte und ein neues Projekt erstellte. Dabei hatte ich plötzlich die Wahl zwischen .NET Framework, .NET Standard und .NET Core. Also habe ich ein wenig in sie hineingeschaut und festgestellt, dass es sich bei den beiden letztgenannten in gewisser Weise um abgekürzte Versionen des vollständigen Frameworks handelt. Ich habe diesen Beitrag von Scott Hanselman gelesen ASP.NET 5 ist tot - Einführung in ASP.NET Core 1.0 und .NET Core 1. Ich habe auch dies gefunden, was mich von ASP.NET Core ablenkte: Wählen Sie zwischen ASP.NET und ASP.NET Core . Mein Tipp war: "Core ist neu, es ist in Ordnung, weiterhin das gesamte Framework zu verwenden." Daher habe ich mit .NET Framework 4.6.2 und Microsoft.AspNet.Mvc 5.2.3 eine neue ASP.NET MVC-Site erstellt.

Seit ich dieses Projekt erstellt habe, habe ich festgestellt, dass sowohl in MVC als auch in Entity Framework scheinbar einige Fehler aufgetreten sind, und dass die einzige Erwähnung im Web in Core zu suchen ist.

Heute versuche ich, die Dokumentation zu System.Web.Mvc.Controller und System.Web.Mvc.JsonResult nachzuschlagen. Die Dokumentation ist nur in der Kerndokumentation enthalten. Ich habe es endlich ausgegraben hier wo steht, dass es nicht mehr gewartet wird?

Ich verstand so viel über Core und sagte: "Okay, warum sollte es mich interessieren? Ich werde weitermachen, was ich tue, und das nachprüfen, wenn es fertig ist." Aber jetzt scheint es, dass 4.6.2 nicht einmal mehr unterstützt wird. Kann jemand erklären, was los ist? Ist mein NET 4.6.2/MVC 5.2.3-Projekt jetzt veraltet, bevor ich mit dem Schreiben fertig bin? Wenn nicht, warum wurde die Dokumentation zurückgezogen und versteckt? Ich mache mir Sorgen, dass einige meiner Abhängigkeiten möglicherweise nicht für Core verfügbar oder mit Core kompatibel sind.

31
xr280xr

( Diese Antwort wird regelmäßig aktualisiert, wenn eine neue .NET-Ankündigung erfolgt. Sie wurde mit Details zu ASP.NET Core 3.0, .NET 3 und .NET 5 aktualisiert. )

Microsoft braucht eine gute Ohrfeige für das Ausmaß der Verwirrung in den letzten 3 Jahren über .NET Core/DNX, ASP.NET Core, .NET Standard, .NET 5 und den Rest.

(Und ich sage, dass als ehemaliger FTE SE in DevDiv ... ("Hallo von Gebäude 16!"))

  • ASP.NET aka "System.Web" ist jetzt tot. WebForms ist tot (Hurra!)
  • ASP.NET MVC wurde 2008 auf Basis von ASP.NET gestartet, umging jedoch den größten Teil der WebForms-Infrastruktur.
    • ASP.NET MVC hat eine eigene Versionierung, die von ASP.NET und ASP.NET Web API (und ASP.NET Core ) getrennt ist. Sie haben eine Verknüpfung zu ASP.NET MVC 5 hergestellt.Dies ist nicht dasselbe wie ASP.NET 5 .
  • ASP.NET-Web-API wurde 2012 eingeführt und ist ein Geschwister von ASP.NET MVC , das auf ASP.NET aufbaut, aber eine eigene Klassenbibliothek hat (System.Web.Http), Die nicht viel mit ASP.NET MVC (System.Web.Mvc) Gemeinsam hatten. Der Versuch, einen ASP.NET-Web-API-Dienst mit einer ASP.NET-MVC-Webanwendung in demselben Projekt zu kombinieren, ist eine schwierige Aufgabe.
  • ASP.NET MVC 5 wurde 2014 als Update für ASP.NET MVC 4 veröffentlicht. Es hat nichts mit ASP.NET 5 zu tun.
  • ASP.NET MVC 6 wurde nie veröffentlicht. Es wurde in ASP.NET 5 gerollt, das dann ASP.NET Core wurde. Ziel war es, ASP.NET MVC und ASP.NET Web API in einer einzigen Plattform zu kombinieren.
  • ASP.NET Core wurde 2016 als verbessertes Design von ASP.NET MVC 5 eingeführt, jedoch ohne die Abhängigkeiten von System.Web.dll Oder irgendwelchen (jetzt vorhandenen) IIS Abhängigkeiten (z. B. die alte Anforderungspipeline IHttpHandler und IHttpModule existiert nicht mehr).
    • Beachten Sie, dass der Stammnamespace der ASP.NET Core - Klassenbibliothek jetzt Microsoft.AspNet Und nicht System.Web Ist. Dies war eine Quelle der Verwirrung für mich. Dies bedeutet, dass das Aktualisieren von Projekten von ASP.NET MVC und ASP.NET WebAPI auf ASP.NET Core nicht trivial ist, obwohl die grundlegende Architektur von Controllern und Middleware identisch ist.
  • .NET Core ist eine neue Version von CLR und BCL, die explizit portierbar ist und unter Windows, Linux und macOS ausgeführt werden kann.
    • .NET Core 1.0 und .NET Core 2.0 Die Basisklassenbibliotheken wurden im Vergleich zufull-fat .NET Framework als anämisch eingestuft Windows-exklusiv.
    • Mit .NET Core 3.0 und dem Open-Sourcing von WinForms, WPF und anderen Komponenten von .NET Framework ist .NET Core jetzt als Ersatz für .NET Framework in Windows für die Entwicklung neuer Anwendungen vorbereitet.
  • .NET 5 wird der neue Name von .NET Core sein, nachdem .NET Core 3 veröffentlicht wurde (.NET 5 wird für Ende 2020 erwartet).
    • .NET 5 hatabsolut nichtsmit ASP.NET 5.0 noch ASP.NET MVC 5 zu tun.
    • Es gibt kein .NET Core 4 noch .NET Framework 5.0 .

Ich stelle fest, dass "Core" dashotBranding von Microsoft für die aktuelle Generation von .NET-Plattformen ist, die mit .NET Core arbeiten (d. H. Sie haben keine Windows-Abhängigkeiten und sind daher portabel). (Genau wie Microsoft in den 90er Jahren "Active" auf Dinge angewendet hat, die COM oder ActiveX verwendeten, z. B. Active Desktop, Active Channels, ActiMates, Active Directory, ActiveSync usw.). - Außerdem fehlt Entity Framework Core Entity Framework 6 immer noch eine Menge Funktionen. Dies liegt daran, dass es sich im Grunde genommen um ein Neuschreiben handelt - aber irgendwann wird es die Parität erreichen.

Da derzeit viele .NET-Laufzeiten und BCLs verfügbar sind (.NET Framework, .NET Core, UWP, Xamarin (das Mono verwendet), Unity und andere), hat Microsoft .NET Standard eingeführt, bei dem es sich im Grunde um einen Neustart des Portable handelt Klassenbibliothekskonzept: Visual Studio-Projekte zielen auf eine bekannte Teilmenge allgemeiner Funktionen statt auf eine bestimmte Implementierung. (Ich wünschte nur, sie würden die Versionsnummerierung bei 4 beginnen, um mit .NET Framework übereinzustimmen, anstatt bei 1.0 Zu beginnen, da ich mich deswegen erneut Gedanken über 2001 gemacht hätte.) - aber der wichtige Teil ist, dass ASP.NET Core 1 und ASP.NET Core 2 .NET-Standard anstelle von .NET Core als Ziel verwendet wird - was bedeutet, dass ASP.NET Core über .NET ausgeführt wird Framework unter Windows zusätzlich zur Ausführung auf .NET Core.

Ich stelle fest, dass alle früheren plattformübergreifenden .NET-Kompatibilitätstechniken veraltet sind (einschließlich der Ausrichtung auf Compact Framework-Subsets, Portable Class Libraries und sogar "Shared Projects" in Visual Studio), da sie für andere Editionen von .NET gedacht waren, die keine B. .NET Compact Framework, XNA, Silverlight und die Teilmenge von Windows Phone 7.

Im Mai 2019 Microsoft kündigte ".NET 5" an . Kurz gesagt, das .NET Framework wird durch .NET Core ersetzt (speziell: Die nächste Version von .NET Core nach .NET Core 3.0 wird .NET 5 heißen). Diese Ankündigung betrifft ASP.NET Core überhaupt nicht, mit Ausnahme der Tatsache, dass .NET 5 ASP.NET Core 3.0 Anwendungen, die darauf ausgeführt werden, vollständig unterstützt. (ASP.NET Core 4 wird dann wahrscheinlich trotzdem veröffentlicht)

Zusammenfassend:

  • ASP.NET MVC 5 war ein kurzlebiger Nachfolger von ASP.NET MVC 4 , das zusammen mit ASP.NET Web API 2 veröffentlicht wurde. Es lief tatsächlich auf ASP.NET 4 (d. H. .NET 4.x-Version von System.Web.dll). Die Plattform ASP.NET MVC ist jetzt veraltet.
  • ASP.NET 5 wurde mit EOL versehen und als ASP.NET Core umbenannt und enthält die Funktionalität von "ASP.NET MVC 5".
  • ASP.NET Core 1 und ASP.NET Core 2 können entweder auf .NET Core (plattformübergreifend) oder .NET Framework (Windows) ausgeführt werden, da sie auf .NET Standard abzielen.
  • ASP.NET Core 3 läuft jetzt nur auf .NET Core 3.0 .

Alle von ihnen (in chronologischer Reihenfolge):

  • ASP.NET 1 - 2001. Enthalten WebForms . Lief unter .NET Framework 1.0 und 1.1. System.Web.dll.
  • ASP.NET 2.0 - 2005. Enthalten WebForms . Lief unter .NET Framework 2.0. System.Web.dll.
  • ASP.NET MVC 1 und ASP.NET MVC 2 - 2008-2009. Lief über ASP.NET 2.0. System.Web.Mvc.dll.
  • ASP.NET 4.0 - 2010. Enthaltene WebForms . Lief unter .NET Framework 4.0. Es gab kein ASP.NET 3.0 . System.Web.dll.
  • ASP.NET MVC 3 und ASP.NET MVC 4 - 2010-2013. Lief über ASP.NET 4.0. System.Web.Mvc.dll.
  • ASP.NET Web Api 1 - 2012. Wurde auf ASP.NET 4.0 ausgeführt. System.Web.Http.dll.
  • ASP.NET MVC 5 - 2013. Nur ein weiteres Update zu ASP.NET MVC . Lief auf ASP.NET 4.0 , könnte aber auch unabhängig ohne System.Web.dll Unter OWIN laufen.
  • ASP.NET Web API 2 - 2013. Geschwister zu ASP.NET MVC 5 . Könnte auch ohne ASP.NET 4.0 unter OWIN laufen.
  • ASP.NET MVC 6 - 2014-2015. Abgebrochen nach Erreichen des Release Candidate-Status und Neustart als ASP.NET Core MVC 1.0 in 2016, der MVC- und Web-API-Komponente von ASP.NET Core 1 .
  • ASP.NET 5 - 2014. Großer Neustart von ASP.NET hier beschrieben . Die wichtigsten Änderungen betrafen das Zusammenführen von MVC, Webseiten und Web-API sowie das Entfernen von WebForms . ASP.NET 5 erreichte den Release Candidate-Status, wurde dann aber in ASP.NET Core umbenannt. Es gab noch nie ein ASP.NET 6 .
  • ASP.NET Core 1 - 2016. Läuft unter .NET Framework 4.5 oder .NET Core 1.0 .
  • .NET Core - 2016. Portable und minimale .NET-Laufzeit- und Klassenbibliothek.
  • .NET Standard - 2017. Eine Möglichkeit für Programme, auf einen gemeinsamen Satz von Funktionen abzuzielen, der in allen .NET-Implementierungen vorhanden sein wird (.NET Framework 4.5 und höher, .NET Core 2.0 und höher, Xamarin usw.).
  • ASP.NET Core 2 - 2017-2018: Wo wir heute sind. Läuft unter .NET Framework 4.6.1 oder .NET Core 2.0 . (Ab Ende 2018 gibt es jetzt ASP.NET Core 2.1).
  • ASP.NET Core 3 - Ende Oktober 2018 kündigte Microsoft an, dass ASP.NET Core 3.0 jetzt nur auf dem kommenden .NET Core 3.0 ausgeführt werden wird (daher wird es auf dem nicht mehr ausgeführt. NET Framework 4.7.x). Dies ist ein umstrittener Schritt, da es aufgrund nicht unterstützter Abhängigkeiten keinen Aktualisierungspfad von ASP.NET Core 2.x auf ASP.NET Core 3.x für Anwendungen gibt, die unter .NET Framework 4.7.x ausgeführt werden .NET Core noch nicht, was bedeutet, dass es wahrscheinlich keinen .NET Standard 3.0 geben wird.
  • ASP.NET Core 3.0 unter .NET 5 - In der Ankündigung von .NET 5 vom Mai 2019 gab Microsoft an, dass ASP.NET Core 3.0-Anwendungen unter .NET 5 ausgeführt werden. Es ist derzeit unklar, ob ASP .NET Core 2.x-Anwendungen können unter .NET 5 unverändert ausgeführt werden.

Zeitleiste und Blockdiagramm

(Ich wurde davon mitgerissen, dies zu machen ...)

Diagram with a timeline of ASP.NET and a block diagram showing how the components of .NET Framework, ASP.NET and ASP.NET MVC come together

91
Dai

In dieser Antwort wird versucht, sich nur auf ASP.NET MVC 5 und möglichst wenig ASP.NET Core zu konzentrieren.

Produktlebenszyklus

Microsoft unterstützt dies weiterhin, und es ist noch kein Ende des Lebens angekündigt.

https://www.asp.net/support

Framework/Product Retirement

ASP.NET MVC 4 1. Juli 2019

ASP.NET MVC 5

Also, wenn Sie möchten, verwenden Sie es weiter. Denken Sie daran, dass VB6 und klassische ASP Benutzer weiterhin von Microsoft unterstützt werden.

.NET Framework 4.5.2 und höher wird weiterhin unterstützt, wenn Sie die Microsoft-Dokumentation zum Produktlebenszyklus überprüfen.

Wartung

Sie müssen jedoch beachten, dass sich ASP.NET MVC 5 im Wartungsmodus befindet, da sich die Entwicklungsressourcen derzeit fast ausschließlich in ASP.NET Core befinden.

Sie bekommen,

  • Unvorhersehbare Patch-Versionen von NuGet.org.

Wenn Sie die relevanten NuGet-Pakete überwachen, sollten Sie beachten, dass Microsoft diese auch vor kurzem aktualisiert, um Sicherheitslücken usw. zu beseitigen.

  • Dokumentation gesperrt.

In dem Hinweis, den Sie von Microsoft Docs erhalten haben, wird der erste Satz betont: "Wir aktualisieren diesen Inhalt nicht mehr regelmäßig." Das ist absolut sinnvoll, da ASP.NET MVC 5 absolut stabil ist und Sie nicht mehr damit rechnen sollten, dass neue Materialien hinzugefügt werden.

  • Sehr begrenzte Fehlerbehebungen und neue Funktionen.

Sie sagten: "Seit der Erstellung dieses Projekts habe ich festgestellt, dass sowohl in MVC als auch in Entity Framework scheinbar einige Fehler aufgetreten sind, und dass die einzige Erwähnung im Web in Core zu erfolgen scheint. Dies ist der einzige Ort, an dem sie als behoben eingestuft werden . "

Nun, es hängt wirklich davon ab, von welchen "Fehlern" Sie sprechen. Wie ich bereits sagte, werden sicherheitsrelevante Probleme immer noch behoben, aber es ist am unwahrscheinlichsten, dass Fehler mit Problemumgehungen oder Funktionseinschränkungen behoben werden. Es ist ein Open-Source-Projekt. Wenn Sie also wirklich wollen, können Sie die Probleme als letztes Mittel selbst beheben.

Was die neuen Funktionen betrifft, so exportiert Microsoft einige Funktionen von ASP.NET Core zurück, z. B. die Abhängigkeitsinjektion und das neue Konfigurationssystem, um die Migration bis zu einem gewissen Grad zu vereinfachen. Aber erwarte nicht viel.

Migration

Ziehen Sie in Betracht, nach Möglichkeit auf ASP.NET Core zu migrieren.

7
Lex Li