Guide pratique pour mettre à niveau un projet ASP.NET MVC 4 et Web API vers ASP.NET MVC 5 et API Web 2
par Rick Anderson
ASP.NET MVC 5 et l’API web 2 apportent une foule de nouvelles fonctionnalités, notamment le routage des attributs, les filtres d’authentification et bien plus encore. Consultez https://www.asp.net/vnext pour plus d’informations.
Cette procédure pas à pas vous guidera dans les étapes nécessaires à la mise à niveau de votre application vers la dernière version.
Notes
Consultez ASP.NET et Web Tools pour Visual Studio 2013 notes de publication pour plus d’informations sur les changements cassants de MVC 4 et de l’API web vers la version suivante.
Cet article a été écrit par Youngjune Hong et Rick Anderson ( @RickAndMSFT )
Étapes de mise à niveau
Sauvegardez votre projet. Cette procédure pas à pas vous oblige à apporter des modifications à votre fichier projet, à la configuration du package et aux fichiers web.config.
Pour la mise à niveau de l’API web vers l’API web 2, dans global.asax, modifiez :
WebApiConfig.Register(GlobalConfiguration.Configuration);
to
GlobalConfiguration.Configure(WebApiConfig.Register);
Assurez-vous que tous les packages utilisés par vos projets sont compatibles avec MVC 5 et l’API Web 2. Le tableau suivant présente les packages liés à MVC 4 et à l’API web qui doivent être modifiés. Si vous avez un package qui dépend de l’un des packages répertoriés ci-dessous, contactez les éditeurs pour obtenir les versions les plus récentes compatibles avec MVC 5 et Web API 2. Si vous disposez du code source pour ces packages, vous devez les recompiler avec les nouveaux assemblys de MVC 5 et web API 2.
Package Id Ancienne version Nouvelle version Microsoft.AspNet.Razor 2.0.x.x 3.0.0 Microsoft.AspNet.WebPages 2.0.x.x 3.0.0 Microsoft.AspNet.WebPages.WebData 2.0.x.x 3.0.0 Microsoft.AspNet.WebPages.OAuth 2.0.x.x 3.0.0 Microsoft.AspNet.Mvc 4.0.x.x 5.0.0 Microsoft.AspNet.Mvc.Facebook 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.Core 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.SelfHost 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.Client 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.OData 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.WebHost 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.Tracing 4.0.x.x 5.0.0 Microsoft.AspNet.WebApi.HelpPage 4.0.x.x 5.0.0 Microsoft.Net.Http 2.0.x. 2.2.x. Microsoft.Data.OData 5.2.x 5.6.x System.Spatial 5.2.x 5.6.x Microsoft.Data.Edm 5.2.x 5.6.x Microsoft.AspNet.Mvc.FixedDisplayModes <o:p></o:p> Supprimé Microsoft.AspNet.WebPages.Administration <o:p></o:p> Supprimé Microsoft-Web-Helpers <o:p></o:p> Microsoft.AspNet.WebHelpers Notes
Microsoft-Web-Helpers a été remplacé par Microsoft.AspNet.WebHelpers. Vous devez d’abord supprimer l’ancien package, puis installer le package le plus récent.
Il n’existe aucune compatibilité entre les versions entre les principaux packages ASP.NET. Par exemple, MVC 5 est compatible uniquement avec Razor 3, et non avec Razor 2.
Ouvrez votre projet dans Visual Studio.
Supprimez l’un des packages NuGet ASP.NET suivants installés. Vous les supprimerez à l’aide de la console du Gestionnaire de package (PMC). Pour ouvrir le PMC, sélectionnez le menu Outils , puis sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Votre projet n’inclut peut-être pas tous ces éléments.
Microsoft.AspNet.WebPages.Administration
Ce package est généralement ajouté lors de la mise à niveau de MVC 3 vers MVC 4. Pour le supprimer, exécutez la commande suivante dans le PMC :
Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
Microsoft-Web-Helpers
Ce package a été renommé en .Microsoft.AspNet.WebHelpers
Pour le supprimer, exécutez la commande suivante dans le PMC :
Uninstall-Package -Id Microsoft-Web-Helpers
Microsoft.AspNet.Mvc.FixedDisplayMode
Ce package contient un travail de contournement d’un bogue dans MVC 4 qui a été résolu dans MVC 5. Pour le supprimer, exécutez la commande suivante dans le PMC :
Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
Mettez à niveau tous les packages NuGet ASP.NET à l’aide du PMC. Dans la console du gestionnaire de package, exécutez la commande suivante :
Update-Package
LaUpdate-Package
commande sans paramètres met à jour chaque package. Vous pouvez mettre à jour des packages individuellement à l’aide de l’argument ID. Pour plus d’informations sur la commande update, exécutezget-help update-package
.
Mettre à jour le fichier deweb.configd’application
Veillez à apporter ces modifications dans le fichier web.config de l’application, et non dans le fichier web.config dans le dossier Views .
Recherchez la <runtime>/<assemblyBinding>
section et apportez les modifications suivantes :
Dans les éléments avec l’attribut de nom « System.Web.Mvc », remplacez le numéro de version de « 4.0.0.0 » par « 5.0.0.0 ». (Deux modifications apportées à cet élément.)
Dans les éléments avec l’attribut de nom « System.Web.Helpers » et « System.Web.WebPages », remplacez le numéro de version de « 2.0.0.0 » par « 3.0.0.0 ». Quatre modifications se produisent, deux dans chacun des éléments.
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <!--Two elements removed for Clarity --> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <!--WebGrease element removed for Clarity --> </assemblyBinding
Recherchez la
<appSettings>
section et mettez à jour les pages web:version de 2.0.0.0 vers 3.0.0.0 comme indiqué ci-dessous :<appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
Supprimez tous les niveaux de confiance autres que Full. Par exemple :
<securityPolicy> <!--<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>--> </securityPolicy>
Mettre à jour les fichiersweb.config sous le dossier Vues
Si votre application utilise des zones, vous devez également mettre à jour chaque fichier web.config dans le sous-dossier Views de chaque dossier Area.
Mettez à jour tous les éléments qui contiennent « System.Web.Mvc » de la version « 4.0.0.0 » vers la version « 5.0.0.0 ».
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <!--Elements removed for Clarity.--> </namespaces> </pages> </system.web.webPages.razor>
--> <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages> </system.web>
Mettez à jour tous les éléments qui contiennent « System.Web.WebPages.Razor » de la version « 2.0.0.0 » vers la version « 3.0.0.0 ». Si cette section contient « System.Web.WebPages », mettez à jour ces éléments de la version « 2.0.0.0 » vers la version « 3.0.0.0 »
<configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections>
Si vous avez supprimé le
Microsoft-Web-Helpers
package NuGet à l’étape précédente, installezMicrosoft.AspNet.WebHelpers
avec la commande suivante dans le PMC :
Install-Package -Id Microsoft.AspNet.WebHelpers
Si votre application utilise la méthode User.IsInRole(), ajoutez ce qui suit au fichier Web.config .
<system.webServer> <modules> <remove name="RoleManager" /> </modules> </system.webServer>
Dernières étapes
Générez et testez l’application.
Supprimez le GUID de type de projet MVC 4 des fichiers projet.
- Dans Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, puis sélectionnez Décharger le projet.
- Cliquez avec le bouton droit sur le projet, puis sélectionnez Modifier le nom du projet.csproj.
- Recherchez l’élément
ProjectTypeGuids
, puis supprimez le GUID du projet MVC 4,{E3E379DF-F4C6-4180-9B81-6769533ABE47}
. - Enregistrez et fermez le fichier projet ouvert.
- Cliquez avec le bouton droit sur le projet et sélectionnez Recharger le projet.