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

78

Ich habe meinen Kopf gesenkt, um an verschiedenen Projekten zu arbeiten, und anscheinend war Microsoft damit beschäftigt, einige große Änderungen vorzunehmen, und es verwirrt mich zum Teufel. ASP.NET Core kam zum ersten Mal auf mein Radar, als ich letztes Jahr Visual Studio 2017 installierte und ein neues Projekt erstellte. Plötzlich hatte ich die Wahl zwischen .NET Framework, .NET Standard und .NET Core. Also habe ich sie mir ein wenig angesehen und festgestellt, dass die beiden letzteren in gewisser Weise abgekürzte Versionen des vollständigen Frameworks sind. 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.0 Ich habe auch diesen gefunden, der mich von ASP.NET Core ablenkte : Wählen Sie zwischen ASP.NET und ASP.NET Core. Mein Tipp war: "Core ist neu, Sie können das gesamte Framework weiterhin 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 einige Fehler sowohl in MVC als auch in Entity Framework gefunden, nur um festzustellen, dass die einzige Erwähnung im Web in Core zu sein scheint und dies der einzige Ort ist, an dem sie als behoben gelten.

Heute versuche ich, die Dokumentation zu System.Web.Mvc.Controller und System.Web.Mvc.JsonResult nachzuschlagen, und sie ist außer unter der Kerndokumentation verschwunden. Ich habe es schließlich graben hier , wo es sagt , dass es nicht mehr aufrecht erhalten werden?

Ich verstand so viel über Core und sagte: "Okay, warum sollte es mich interessieren? Ich werde weitermachen, was ich tue, und das noch einmal überprü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 es überhaupt fertig geschrieben habe? Wenn nicht, warum wurde die Dokumentation zurückgezogen und versteckt? Ich mache mir Sorgen, dass einige meiner Abhängigkeiten möglicherweise nicht einmal für Core verfügbar oder mit Core kompatibel sind.

xr280xr
quelle
10
Ich kann nicht alle Ihre Fragen beantworten, aber es ist sehr falsch , sich .NET Core als "abgekürzte Version des vollständigen Frameworks" vorzustellen. In vielerlei Hinsicht entwickelt .NET Core .NET Framework in vielerlei Hinsicht weiter. keiner ist eine ziemliche Teilmenge des anderen. Die Kurzversion wäre "Ja, .NET Framework ist hier, um zu bleiben, aber: Wenn Sie können, sollten Sie planen, auf .NET Core zu migrieren". Das von Ihnen erwähnte Abhängigkeitsproblem ist nicht trivial, aber die meisten gängigen Bibliotheken unterstützen bereits .NET Core oder .NET Standard. Aber niemand wird Sie dazu bringen, sich zu bewegen, und viele Apps werden .NET Framework weiterhin auf unbestimmte Zeit verwenden.
Marc Gravell
1
Sie können ein ASP-Net Core MVC-Projekt als Ziel für die Ausführung auf dem vollständigen .NET Framework festlegen.
jmoerdyk
Danke @MarcGravell. Ich lese einfach weiter, dass dem Kern bestimmte Funktionen fehlen und er mit bestimmten Dingen nicht funktioniert, weil er von Grund auf neu aufgebaut wird, aber das ist noch nicht vollständig, aber niemand sagt jemals genau, was diese Dinge sind. Ist es die nächste .Net-Version oder hat sich das Framework in zwei Teile verzweigt? Ich würde es hassen, Core zu übernehmen und dann herauszufinden, dass es einige wichtige Funktionen, die in früheren Versionen verfügbar waren, nicht unterstützt.
xr280xr
Es scheint, dass ich einige Verwirrung zwischen ASP.NET Core und .NET Core hatte.
xr280xr
1
@Dai .NET Core verfügt über eine eigenständige Bereitstellungsoption (derzeit experimentell), die Sie jedoch nicht verwenden müssen. Es ist jedoch möglicherweise einfacher, diese auf diese Weise für Clients bereitzustellen, was für Client-Apps möglicherweise verlockend ist. Das heißt: .NET Core dreht sich viel schneller als .NET Framework; Wenn Sie sagen, dass Sie wahrscheinlich schneller Korrekturen für .NET Core erhalten. Aber ja, die Frage ist dann: Wird dieses Update bereitgestellt?
Marc Gravell

Antworten:

224

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

Microsoft braucht eine gute Ohrfeige für die Verwirrung in der Vergangenheit 3 Jahre 5 Jahre über .NET Core / DNX, ASP.NET Core, .NET Standard, .NET 5 und den Rest.

(und ich sage das als ehemalige FTE SE in DevDiv ... ("Hallo vom Gebäude 16!") )

  • ASP.NET alias "System.Web" ist jetzt tot. WebForms ist tot (Hurra!)
  • ASP.NET MVC, das 2008 gestartet wurde, wurde auf ASP.NET aufgebaut, umging jedoch den größten Teil der WebForms-Infrastruktur.
    • ASP.NET MVC verfügt über eine eigene Versionierung, die von ASP.NET und ASP.NET Web API (und ASP.NET Core ) getrennt ist. Sie haben eine Verknüpfung zur Dokumentation von ASP.NET MVC 5 hergestellt. Dies ist nicht dasselbe wie bei ASP.NET 5 .
  • Die 2012 gestartete ASP.NET-Web-API ist ein Geschwister von ASP.NET MVC , da sie ebenfalls auf ASP.NET aufbaut, jedoch über eine eigene Klassenbibliothek ( System.Web.Http) verfügt, die nicht viel mit ASP.NET MVC gemeinsam hat ( System.Web.Mvc). Der Versuch, einen ASP.NET-Web-API-Dienst mit einer ASP.NET MVC-Webanwendung im selben Projekt zu kombinieren, ist eine schmerzhafte Übung.
  • ASP.NET MVC 5 wurde 2014 als Update für ASP.NET MVC 4 gestartet . Es hat nichts mit ASP.NET 5 zu tun .
  • ASP.NET MVC 6 wurde nie veröffentlicht. Es wurde in ASP.NET 5 integriert, das dann zu 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 gestartet, jedoch ohne die Abhängigkeiten von System.Web.dlloder keine (jetzt älteren) IIS-Abhängigkeiten (z. B. die alte Anforderungspipeline IHttpHandlerund IHttpModulenicht mehr vorhanden).
    • Beachten Sie, dass der Stammnamespace der Klassenbibliothek von ASP.NET Core jetzt Microsoft.AspNetund nicht mehr lautet System.Web. 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 portabel ist und unter Windows, Linux und macOS ausgeführt wird.
    • .NET - Core 1.0 und .NET Core 2.0 ‚s Basisklassenbibliotheken wurden anämisch betrachtet im Vergleich zum Vollfett .NET Framework , die Windows-exklusiv ist.
    • Mit .NET Core 3.0 und dem Open-Sourcing von WinForms, WPF und anderen Komponenten von .NET Framework wird .NET Core jetzt als Ersatz für .NET Framework in Windows für die Entwicklung neuer Anwendungen bereitgestellt.
  • .NET 5 wird nach der Veröffentlichung von .NET Core 3 der neue Name von .NET Core sein (.NET 5 wird voraussichtlich Ende 2020 vorliegen).
    • .NET 5 hat absolut nichts mit ASP.NET 5.0 oder ASP.NET MVC 5 zu tun .
    • Es gibt weder .NET Core 4 noch .NET Framework 5.0 .
  • " ASP.NET Core für .NET 5 " scheint der endgültige Name für die erste Version von ASP.NET Core zu sein, die speziell auf .NET 5 ausgerichtet ist .

Ich stelle fest, dass "Core" das Hot Branding von Microsoft für die aktuelle Generation von .NET-Plattformen ist, die mit .NET Core arbeiten (dh sie haben keine Windows-Abhängigkeiten und sind daher portabel). (Genau wie Microsoft in den 1990er Jahren "Active" auf Dinge geklebt hat, wenn sie COM oder ActiveX verwendeten, z. B. Active Desktop, Active Channels, ActiMates, Active Directory, ActiveSync usw.).

  • zusätzlich Entity Framework - Core noch viel Funktionalität von Entity Framework 6 fehlt, ist dies , weil es ein Umschreiben ist, im Grunde genommen - aber es wird schließlich die Parität zu erreichen.

Da derzeit viele .NET-Laufzeiten und BCLs verfügbar sind (.NET Framework, .NET Core, UWP, Xamarin (mit Mono), Unity und andere), hat Microsoft .NET Standard eingeführt, bei dem es sich im Grunde um einen Neustart des Konzepts der Portable Class Library handelt: Dabei zielen Visual Studio-Projekte auf eine bekannte Teilmenge allgemeiner Funktionen anstatt auf eine bestimmte Implementierung. (Ich wünschte nur, sie würden die Versionsnummerierung von 4 beginnen, um mit .NET Framework übereinzustimmen, anstatt bei zu beginnen, 1.0da ich dann wieder über 2001 nachdenken musste.) - aber der wichtige Teil ist, dass ASP.NET Core 1 und ASP.NET Kern 2 Ziel .NET Standard anstelle von .NET Core - Dies bedeutet, dass ASP.NET Core unter Windows zusätzlich zu .NET Core auch auf .NET Framework ausgeführt wird.

Ich stelle fest, dass alle früheren plattformübergreifenden .NET-Kompatibilitätstechniken veraltet sind (einschließlich der Ausrichtung auf Compact Framework-Teilmengen, tragbare Klassenbibliotheken und sogar "freigegebene Projekte" in Visual Studio), da sie für andere Editionen von .NET gedacht waren, die nicht länger existieren, wie z. B. .NET Compact Framework, XNA, Silverlight und die Teilmenge von Windows Phone 7.

Im Mai 2019 kündigte Microsoft ".NET 5" an . Kurz gesagt, .NET Framework wird durch .NET Core ersetzt , und die nächste Version von .NET Core nach .NET Core 3.0 heißt .NET 5 ). Diese Ankündigung betrifft ASP.NET Core überhaupt nicht, außer der Tatsache, dass .NET 5 ASP.NET Core 3.0- Anwendungen, die darauf ausgeführt werden, vollständig unterstützt .

Während des Covid-Themas im Sommer 2020 hat Microsoft .NET 5 und ASP.NET Core fertiggestellt. Ab Oktober 2020 haben NuGet der ASP.NET Core - Paket Versionen von 3.1.x bis 5.0.0 sprangen - so sieht es aus , als ob die nächste große Version von ASP.NET - Core versioniert werden , 5.x.xwelche seine Veröffentlichung schlägt vor , kann benannt werden " ASP. NET Core 5 ", obwohl in jüngsten Microsoft-Blog-Artikeln vorgeschlagen wird, dass der Name" ASP.NET Core für .NET 5 "lautet - obwohl dieser gesamte Thread aus der Verwirrung über" ASP.NET MVC 5 "und" ASP.NET "erstellt wurde 5 "Ich bin sicher, dass die Bezeichnung" ASP.NET Core 5 "oder" ASP.NET Core für .NET 5 " absolut nicht verwirrend sein wird , nein, Sir-ee-bob!

In Summe:

  • ASP.NET MVC 5 :
    • ASP.NET MVC 5 war ein kurzlebiger Nachfolger von ASP.NET MVC 4 .
    • Es wurde zusammen mit ASP.NET Web API 2 veröffentlicht veröffentlicht.
    • Es lief tatsächlich auf ASP.NET 4 (dh .NET 4.x-Version von System.Web.dll). Beachten Sie, dass die gesamte ASP.NET MVC- Bibliothek jetzt veraltet ist.
  • ASP.NET 5 wurde EOL-fähig und in 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 es auf .NET Standard abzielt.
  • ASP.NET Core 3 läuft jetzt nur unter .NET Core 3.0 .
  • ASP.NET Core 4 existiert nicht und hat es nie getan.
  • ASP.NET Core 5 existiert (Stand August 2020), sein offizieller Name scheint jedoch "ASP.NET Core für .NET 5" zu sein und läuft nur unter .NET 5 .

Alle (in chronologischer Reihenfolge):

  • ASP.NET 1 - 2001. Enthaltene WebForms . Lief unter .NET Framework 1.0 und 1.1. System.Web.dll.
  • ASP.NET 2.0 - 2005. Enthaltene WebForms . Lief unter .NET Framework 2.0. System.Web.dll.
  • ASP.NET MVC 1 und ASP.NET MVC 2 - 2008-2009. Lief auf 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 auf ASP.NET 4.0. System.Web.Mvc.dll.
  • ASP.NET Web Api 1 - 2012. Lief auf ASP.NET 4.0 . System.Web.Http.dll.
  • ASP.NET MVC 5 - 2013. Nur ein weiteres Update für ASP.NET MVC . Lief auf ASP.NET 4.0 , konnte aber auch ohne System.Web.dllOWIN unabhängig ausgeführt werden .
  • ASP.NET Web API 2 - 2013. Geschwister zu ASP.NET MVC 5 . Könnte auch ohne ASP.NET 4.0 unter OWIN ausgeführt werden.
  • ASP.NET MVC 6 - 2014-2015. Abgebrochen nach Erreichen des Release Candidate-Status und Neustart als ASP.NET Core MVC 1.0 im Jahr 2016, der MVC- und Web-API-Komponente von ASP.NET Core 1 .
  • ASP.NET 5 - 2014 Haupt Neustart von ASP.NET hier beschrieben . Zu den wichtigsten Änderungen gehörten das Zusammenführen von MVC, Webseiten und Web-API sowie das Entfernen von WebForms . ASP.NET 5 erreichte den Release Candidate-Status, wurde dann jedoch in ASP.NET Core umbenannt . Es gab noch nie ein ASP.NET 6 .
  • ASP.NET Core 1 - 2016. Läuft entweder unter .NET Framework 4.5 oder .NET Core 1.0 .
  • .NET Core - 2016. Tragbare und minimale .NET-Laufzeit- und Klassenbibliothek.
  • .NET Standard - 2017. Eine Möglichkeit für Programme, auf einen gemeinsamen Satz von Funktionen abzuzielen, die in allen .NET-Implementierungen (.NET Framework 4.5 und höher, .NET Core 2.0 und höher, Xamarin usw.) vorhanden sind.
  • 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 kann (daher wird es nicht mehr auf .NET Framework 4.7.x ausgeführt). Dies ist ein kontroverser Schritt, da es jetzt keinen Upgrade-Pfad von ASP.NET Core 2.x zu ASP.NET Core 3.x für Anwendungen gibt, die unter .NET Framework 4.7.x ausgeführt werden, da Abhängigkeiten nicht unterstützt werden .NET Core noch, was bedeutet, dass es wahrscheinlich keinen .NET Standard 3.0 geben wird.
  • .NET 5 - Mai 2019: Microsoft kündigte die nächste Version von .NET Core an, nachdem .NET Core 3.1 weder ".NET Core 4.0" noch ".NET Core 5.0" heißen würde, sondern zur Versionsnummer 5.0 springen und den "Core" fallen lassen würde "Branding, daher" .NET 5.0 ".
  • ASP.NET Core 3.0 unter .NET 5 - In der Ankündigung von .NET 5 im Mai 2019 Microsoft außerdem an, dass ASP.NET Core 3.0-Anwendungen unter .NET 5 ausgeführt werden. Derzeit ist unklar, ob ASP.NET Core 2.x-Anwendungen verfügbar sind kann unter .NET 5 unverändert ausgeführt werden.
  • ASP.NET Core vNext unter .NET 5 - August 2020: Mit der bevorstehenden Veröffentlichung von .NET 5 hat Microsoft die Versionsnummern der NuGet-Pakete für ASP.NET Core auf erhöht5.0.0 . Microsoft hat diese neue Version von ASP.NET Core noch nicht offiziell als "ASP.NET Core 5" bezeichnet, aber ich sehe dies als eine ausgemachte Sache an.
  • ASP.NET Core für .NET 5 Ein neuerer Blog-Artikel vom September 2020 legt nahe, dass Microsoft die nächste Version von ASP.NET Core als " ASP.NET Core für .NET 5 " bezeichnet (ja, das ist zumindest ein Mund voll es ist nicht so vieldeutig wie frühere Namen).

Zeitleiste und Blockdiagramm

(Ich wurde mitgerissen, als ich das gemacht habe ...)

Diagramm mit einer Zeitleiste von ASP.NET und einem Blockdiagramm, das zeigt, wie die Komponenten von .NET Framework, ASP.NET und ASP.NET MVC zusammenkommen

Dai
quelle
18
Microsoft braucht eine Ohrfeige. Als jemand, der neu in die ASP.NET-Welt kommt, ist es eine monumentale Aufgabe, sich durch die sehr ähnlichen (und doch sehr unterschiedlichen) klingenden Technologien zu wühlen. Tolle Antwort bei der Klärung dieses Chaos.
Luckman777
2
Unten rechts des Diagramms in der roten Box ... :)
Ashby
3
ASP.NET alias "System.Web" ist jetzt tot. WebForms ist tot (Hurra!), Warum viele Menschen diese Technologie hassen, die zu ihrer Zeit und auch jetzt noch großartig war. Alles, was für die Webentwicklung benötigt wird, in einem einzigen kostenlosen Paket.
mz1378
5
@ mz1378 WebForms hat eine MASSIVE Wäscheliste mit Designfehlern, die es mit dem modernen Web - und der Benutzerfreundlichkeit - inkompatibel machen, auf die ich nicht eingehen werde. Das Postback-Modell bricht jedoch die RESTful-Semantik von HTTP. Viewstate funktioniert nie richtig und Ballons fordern Größen an. "Seiten" verletzen von Natur aus die lose Kopplung. Und es ist unmöglich, die gesamte Plattform zu testen oder in Integrationstests zu verwenden.
Dai
1
@ mz1378 "Steuerelemente" machen es unmöglich, Ihr Markup zu steuern. Im Moment arbeite ich an einer geschäftskritischen App, die 2012 mit einem Steuerelement aus einer Drittanbieter-Binärdatei geschrieben wurde, die jQuery 1.2 in jede Seite einbettet (mithilfe von ScriptManager). Es ist eine riesige PITA.
Dai
10

Diese Antwort versucht, sich nur auf ASP.NET MVC 5 und so wenig ASP.NET Core wie möglich zu konzentrieren.

Produktlebensdauer

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. 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.

Instandhaltung

Sie müssen jedoch beachten, dass sich ASP.NET MVC 5 im Wartungsmodus befindet, da sich derzeit fast alle Entwicklungsressourcen auf ASP.NET Core befinden.

Sie bekommen,

  • Unvorhersehbare Patch-Releases von NuGet.org.

Wenn Sie die relevanten NuGet-Pakete überwachen, sollten Sie beachten, dass Microsoft sie bereits kürzlich aktualisiert, um Sicherheitslücken usw. zu beheben.

  • Gesperrte Dokumentation.

Der Hinweis, den Sie in Microsoft Docs gesehen haben, betont tatsächlich den ersten Satz: "Wir aktualisieren diesen Inhalt nicht mehr regelmäßig." Dies ist absolut sinnvoll, da ASP.NET MVC 5 absolut stabil ist und Sie nicht mehr erwarten sollten, dass neue Materialien hinzugefügt werden.

  • Sehr begrenzte Fehlerbehebungen und neue Funktionen.

Sie sagten: "Seit ich dieses Projekt erstellt habe, habe ich einige Fehler in MVC und Entity Framework gefunden, nur um festzustellen, dass die einzige Erwähnung im Web in Core zu sein scheint und dies der einzige Ort ist, an dem sie als behoben gelten." . "

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

Auf der Seite der neuen Funktionen portiert Microsoft einige Funktionen von ASP.NET Core zurück, z. B. Abhängigkeitsinjektion, neues Konfigurationssystem, um die Migration bis zu einem gewissen Grad zu vereinfachen. Aber erwarte nicht viel.

Migration

Ziehen Sie eine Migration auf ASP.NET Core in Betracht, wenn Sie können.

Lex Li
quelle