web-dev-qa-db-fra.com

Je suis perdu. Qu'est-il arrivé à ASP.NET MVC 5?

Je garde la tête basse sur divers projets et apparemment, Microsoft a été en train de faire de gros changements et cela me rend confus. ASP.NET Core a fait son apparition lorsque j'ai installé Visual Studio 2017 l'année dernière et est allé créer un nouveau projet. Soudain, j'ai eu le choix entre .NET Framework, .NET Standard et .NET Core. Je les ai donc un peu examinées et j'ai constaté que ces deux dernières sont, en quelque sorte, des versions abrégées du cadre complet. J'ai lu ce billet de Scott Hanselman ASP.NET 5 est mort - Présentation de ASP.NET Core 1.0 et de .NET Core 1. J'ai également trouvé cela, ce qui m'a permis d'éviter ASP.NET Core: Choisissez entre ASP.NET et ASP.NET Core . Ma conclusion était: "Le noyau est nouveau, vous pouvez continuer à utiliser le cadre complet". J'ai donc créé un nouveau site ASP.NET MVC à l'aide de .NET Framework 4.6.2 et Microsoft.AspNet.Mvc 5.2.3.

Depuis la création de ce projet, j'ai trouvé ce qui semblait être des bogues dans MVC et Entity Framework, mais je me suis rendu compte que la seule mention d'eux sur le Web semblait être dans Core et que c'était le seul endroit où ils étaient considérés en train d'être corrigés.

Aujourd'hui, j'essaie de rechercher la documentation sur System.Web.Mvc.Controller et System.Web.Mvc.JsonResult et elle a disparu sauf dans la documentation principale. J'ai finalement réussi à le creuser ici où il est indiqué qu'il n'est plus maintenu?

J'ai compris à ce point à propos de Core et j'ai dit: "OK, pourquoi devrais-je m'en soucier? Je vais continuer à faire ce que je fais et à vérifier lorsque cela sera fait." Mais maintenant, il semble que 4.6.2 n'est même plus supporté. Quelqu'un peut-il expliquer ce qui se passe? Est-ce que mon projet NET 4.6.2/MVC 5.2.3 est maintenant obsolète avant même d'avoir fini de l'écrire? Si non, pourquoi la documentation a-t-elle été retirée et cachée? Je crains que certaines de mes dépendances ne soient même pas disponibles ou compatibles avec Core.

31
xr280xr

(Cette réponse est régulièrement mise à jour chaque fois qu'une nouvelle annonce .NET est faite. Elle a été mise à jour avec les détails d'ASP.NET Core 3.0, .NET 3 et .NET 5)

Microsoft a besoin d'un bon slap pour la confusion au cours des 3 dernières années sur .NET Core/DNX, ASP.NET Core, .NET Standard, .NET 5 et les autres.

(et je dis cela en tant qu'ancien FTE SE dans DevDiv ... ("salut de la construction 16!"))

  • ASP.NET aka "System.Web" est maintenant mort. WebForms est mort (bravo!)
  • ASP.NET MVC lancé en 2008 a été construit sur ASP.NET, mais il a contourné la plupart des infrastructures WebForms.
    • ASP.NET MVC a son propre versioning distinct de ASP.NET et API Web ASP.NET (et ASP.NET Core) . Vous avez lié à la documentation de ASP.NET MVC 5 - ce n'est pas la même chose que ASP.NET 5.
  • ASP.NET Web API lancée en 2012 est un frère de ASP.NET MVC, en ce sens qu'elle repose sur ASP.NET aussi, mais sa propre bibliothèque de classe (System.Web.Http) qui ne partage pas grand chose avec ASP.NET MVC _ (System.Web.Mvc). Tenter de combiner un service API Web ASP.NET avec une application Web ASP.NET MVC dans le même projet est un exercice fastidieux.
  • ASP.NET MVC 5 a été lancé en 2014 en tant que mise à jour de ASP.NET MVC 4. Il n'a aucun lien avec ASP.NET 5.
  • ASP.NET MVC 6 n'a jamais été publié. Il a été intégré à ASP.NET 5 qui est ensuite devenu ASP.NET Core. Son objectif était de combiner ASP.NET MVC et ASP.NET Web API en une seule et même plate-forme.
  • ASP.NET Core a été lancé en 2016 sous la forme d'une conception améliorée d'ASP.NET MVC 5 mais sans les dépendances sur System.Web.dll ou toute dépendance (maintenant héritée) IIS (par exemple, l'ancien pipeline de demandes, IHttpHandler et IHttpModule n'existent plus)).
    • Notez que l'espace de noms racine de la bibliothèque de classes de ASP.NET Core est désormais Microsoft.AspNet et pas System.Web. C'était une source de confusion pour moi. Cela signifie que la mise à niveau de projets de ASP.NET MVC et ASP.NET WebAPI vers ASP.NET Core n'est pas triviale, bien que leur architecture fondamentale de Controllers et de Middleware soit identique.
  • .NET Core est une nouvelle version du CLR et du BCL, explicitement portable et fonctionnant sous Windows, Linux et macOS.
    • Les bibliothèques de classe de base de .NET Core 1. et .NET Core 2. _ ont été considérées comme anémiques par rapport à full-fat ​​.NET Framework est une exclusivité Windows.
    • Avec .NET Core 3. et les sources ouvertes de WinForms, WPF et d'autres composants de .NET Framework, .NET Core remplace désormais .NET Framework dans Windows pour le développement de nouvelles applications.
  • .NET 5 sera le nouveau nom de .NET Core après la publication de .NET Core (le .NET 5 est attendu vers la fin de 2020).
    • .NET 5 a absolument rien à faire avec ASP.NET 5. ni ASP.NET MVC 5.
    • Il n'y a pas de .NET Core 4 _ ni .NET Framework 5._.

Je remarque que "Core" est la marque hot ​​de Microsoft destinée à la génération actuelle de plates-formes .NET fonctionnant avec .NET Core (c’est-à-dire qu’elles ne possèdent aucune dépendance de Windows et qu’elles sont donc portables). (Tout comme le fait que Microsoft ait bloqué "Actif" dans les années 90 s’ils utilisaient COM ou ActiveX, par exemple, Active Desktop, Active Channels, ActiMates, Active Directory, ActiveSync, etc.). - De plus, Entity Framework Core _ n'a toujours pas beaucoup de fonctionnalités d'Entity Framework 6, car il s'agit en réalité d'une réécriture, mais elle finira par atteindre la parité.

Parce qu'il existe de nombreux programmes d'exécution .NET et BCL actuellement disponibles (.NET Framework, .NET Core, UWP, Xamarin (qui utilise Mono), Unity et d'autres), Microsoft a introduit .NET Standard, qui est essentiellement un redémarrage de le concept de bibliothèque de classes portable: les projets Visual Studio ciblent un sous-ensemble connu de fonctionnalités communes au lieu d'une implémentation spécifique. (Je souhaite juste qu'ils commencent la numérotation des versions à partir de 4 pour correspondre à .NET Framework au lieu de commencer à 1.0 parce que cela m'a fait penser à 2001 encore une fois.) - mais la partie importante est que ASP.NET Core 1 _ et ASP.NET Core 2 cible .NET Standard au lieu de .NET Core - ce qui signifie que ASP.NET Core s'exécute par dessus .NET Framework sous Windows en plus de l’exécution de .NET Core.

Je remarque que toutes les précédentes techniques de compatibilité inter-plateformes .NET sont maintenant obsolètes (y compris le ciblage de sous-ensembles Compact Framework, de bibliothèques de classes portables et même de "projets partagés" dans Visual Studio), car elles étaient destinées à d'autres éditions de .NET. existent plus longtemps, tels que .NET Compact Framework, XNA, Silverlight et le sous-ensemble de Windows Phone 7.

En mai 2019, Microsoft a annoncé ".NET 5" . En bref, le .NET Framework est remplacé par .NET Core (plus précisément: la prochaine version de .NET Core après .NET Core 3.0 sera appelée .NET 5.). Cette annonce ne concerne nullement ASP.NET Core, à part le fait que .NET 5 supportera pleinement les applications ASP.NET Core 3. qui y sont exécutées. (ASP.NET Core 4 sera probablement publié d'ici là de toute façon)

En résumé:

  • ASP.NET MVC 5 était un successeur éphémère à ASP.NET MVC 4, publié avec ASP.NET Web API 2. En fait, il s’exécutait sur ASP.NET 4 _ (c'est-à-dire la version 4.NET de System.Web.dll). La plate-forme ASP.NET MVC est maintenant obsolète.
  • ASP.NET 5 a été supprimé et a été renommé en tant que ASP.NET Core et il inclut les fonctionnalités de "ASP.NET MVC 5" intégré.
  • ASP.NET Core 1 et ASP.NET Core 2 peuvent être exécutés sur .NET Core (multiplate-forme) ou .NET Framework (Windows) car ils ciblent .NET Standard.
  • ASP.NET Core ne fonctionne maintenant que sur .NET Core 3..

Tous (dans l'ordre chronologique):

  • ASP.NET 1 _ 2001. Inclus WebForms_. Couru sur .NET Framework 1.0 et 1.1. System.Web.dll.
  • ASP.NET 2. - 2005. Inclus WebForms. Couru sur .NET Framework 2.0. System.Web.dll.
  • ASP.NET MVC 1 et ASP.NET MVC 2 - 2008-2009. A couru sur ASP.NET 2.0. System.Web.Mvc.dll.
  • ASP.NET 4. - 2010. Inclus WebForms. Couru sur .NET Framework 4.0. Il n'y avait pas de ASP.NET 3.. System.Web.dll.
  • ASP.NET MVC et ASP.NET MVC 4 - 2010-2013. A couru sur ASP.NET 4.0. System.Web.Mvc.dll.
  • ASP.NET Web Api 1 _ 2012. 2012. S'exécutait sur ASP.NET 4.. System.Web.Http.dll.
  • ASP.NET MVC 5 - 2013. Juste une autre mise à jour de ASP.NET MVC. S'exécutait sur ASP.NET 4. mais pouvait également fonctionner indépendamment sans System.Web.dll sous OWIN.
  • ASP.NET Web API 2 _ - 2013. Emilie de ASP.NET MVC 5. Peut aussi être exécuté sans ASP.NET 4. sous OWIN.
  • ASP.NET MVC 6 - 2014-2015. Abandonné après avoir atteint le statut de version candidate et redémarré en tant que ASP.NET Core MVC 1. en 2016, composant MVC et API Web de ASP.NET Core 1.
  • ASP.NET 5 - 2014. Redémarrage majeur d'ASP.NET décrit ici . Les principales modifications concernent la fusion de MVC, de pages Web et d’API Web, ainsi que la suppression de WebForms. ASP.NET 5 a atteint le statut Release Candidate, mais a ensuite été renommé ASP.NET Core. Il n'y a jamais eu de ASP.NET 6.
  • ASP.NET Core 1 - 2016. S'exécute sur .NET Framework 4.5 ou .NET Core 1..
  • .NET Core - 2016. Bibliothèque d'exécution et de classe .NET portable et minimale.
  • .NET Standard - 2017. Un moyen pour les programmes de cibler un ensemble commun de fonctionnalités qui seront présentes dans toutes les implémentations .NET (.NET Framework 4.5 et versions ultérieures, .NET Core 2.0 et versions ultérieures, Xamarin, etc. ).
  • ASP.NET Core 2 _ - 2017-2018: où nous en sommes aujourd'hui. Fonctionne sur .NET Framework 4.6.1 ou .NET Core 2.. (Depuis fin 2018, ASP.NET Core 2.1 est maintenant disponible).
  • ASP.NET Core _ --- fin octobre 2018, Microsoft annonçait qu'ASP.NET Core 3.0 ne fonctionnerait plus que sur le prochain .NET Core 3. (il ne fonctionnera donc plus sur le .NET Framework 4.7.x). Il s’agit là d’une démarche controversée car cela signifie qu’il n’existe désormais plus de chemin de mise à niveau d’ASP.NET Core 2.x vers ASP.NET Core 3.x pour les applications exécutées sur le .NET Framework 4.7.x en raison de dépendances non prises en charge .NET Core pour le moment, ce qui signifie qu’il n’y aura probablement pas de .NET Standard 3.0.
  • ASP.NET Core 3.0 sur .NET 5 - Dans l'annonce de .NET 5 de mai 2019, Microsoft a déclaré que les applications ASP.NET Core 3.0 s'exécuteraient sur .NET 5. Il est Il est actuellement difficile de savoir si les applications ASP.NET Core 2.x pourront s'exécuter sans modification sur .NET 5.

Chronologie et diagramme

(Je me suis emporté pour faire ça ...)

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

Cette réponse essaiera de se concentrer uniquement sur ASP.NET MVC 5 et le moins possible de noyau ASP.NET.

Cycle de vie du produit

Microsoft le prend toujours en charge et aucune annonce de fin de vie n’a encore été annoncée,

https://www.asp.net/support

Cadre/Retrait du produit

ASP.NET MVC 4 1er juillet 2019

ASP.NET MVC 5

Donc, si vous aimez, continuez à l'utiliser. N'oubliez pas que les utilisateurs VB6 et classiques ASP sont toujours pris en charge par Microsoft.

.NET Framework 4.5.2 et versions ultérieures sont toujours pris en charge si vous consultez la documentation de Microsoft sur le cycle de vie du produit.

Maintenance

Cependant, vous devez noter qu'ASP.NET MVC 5 est en mode maintenance, car les ressources de développement sont presque toutes sur ASP.NET Core.

Vous obtenez,

  • Des versions de correctifs imprévisibles de NuGet.org.

Si vous surveillez les packages NuGet pertinents, vous remarquerez que même récemment, Microsoft les met à jour pour corriger les vulnérabilités de sécurité, etc.

  • Documentation verrouillée.

L’avis que vous avez vu dans Microsoft Docs met en fait l’accent sur la toute première phrase "Nous ne mettons plus ce contenu à jour régulièrement". Cela est parfaitement logique dans la mesure où ASP.NET MVC 5 est solide, vous ne devez donc pas vous attendre à ajouter de nouveaux matériaux.

  • Corrections de bugs très limitées et nouvelles fonctionnalités.

Vous avez déclaré: "Depuis la création de ce projet, j'ai trouvé ce qui semblait être des bogues dans MVC et Entity Framework, mais je me suis rendu compte que la seule mention de ceux-ci sur le Web semblait être dans Core et que c'était le seul endroit où ils étaient considérés en train d'être corrigés." . "

Cela dépend vraiment de quels "bugs" vous parlez. Comme je l'ai dit plus tôt, les problèmes liés à la sécurité font encore l'objet de corrections, mais les bogues comportant des solutions de contournement ou des limitations fonctionnelles ont moins de chances d'être résolus. C'est un projet open source, donc si vous le souhaitez vraiment, vous pouvez résoudre le problème vous-même, en dernier recours.

Du côté des nouvelles fonctionnalités, Microsoft rétrograde certaines fonctionnalités d'ASP.NET Core, telles que l'injection de dépendance, le nouveau système de configuration, afin de simplifier la migration à un certain degré. Mais n'attendez pas grand chose.

Migration

Pensez à migrer vers ASP.NET Core si vous le pouvez.

7
Lex Li