Durchführen eines Upgrades für ein ASP.NET MVC 4- und -Web-API-Projekt auf ASP.NET MVC 5 und -Web-API 2
von Rick Anderson
ASP.NET MVC 5 und Web-API 2 bieten eine Vielzahl neuer Features, darunter Attributrouting, Authentifizierungsfilter und vieles mehr. Weitere Informationen finden Sie unter https://www.asp.net/vnext.
Diese exemplarische Vorgehensweise führt Sie mit den erforderlichen Schritten zum Upgrade Ihrer Anwendung auf die neueste Version.
Hinweis
Informationen zu breaking changes from MVC 4 and Web API to the next version finden Sie unter ASP.NET and Web Tools für Visual Studio 2013 Versionshinweise.
Dieser Artikel wurde von Youngjune Hong und Rick Anderson ( @RickAndMSFT ) geschrieben.
Upgradeschritte
Sichern Sie Ihr Projekt. In dieser exemplarischen Vorgehensweise müssen Sie Änderungen an Ihrer Projektdatei, Paketkonfiguration und web.config Dateien vornehmen.
Ändern Sie für das Upgrade von der Web-API auf Web-API 2 in global.asax Folgendes:
WebApiConfig.Register(GlobalConfiguration.Configuration);
zu
GlobalConfiguration.Configure(WebApiConfig.Register);
Stellen Sie sicher, dass alle Pakete, die Ihre Projekte verwenden, mit MVC 5 und Web-API 2 kompatibel sind. In der folgenden Tabelle sind die MVC 4- und Web-API-bezogenen Pakete aufgeführt, die geändert werden müssen. Wenn Sie über ein Paket verfügen, das von einem der unten aufgeführten Pakete abhängig ist, wenden Sie sich an die Herausgeber, um die neueren Versionen zu erhalten, die mit MVC 5 und Web-API 2 kompatibel sind. Wenn Sie über den Quellcode für diese Pakete verfügen, sollten Sie sie mit den neuen Assemblys von MVC 5 und Web-API 2 neu kompilieren.
Paket-ID Alte Version Neue 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> Entfernt Microsoft.AspNet.WebPages.Administration <o:p></o:p> Entfernt Microsoft-Web-Hilfsprogramme <o:p></o:p> Microsoft.AspNet.WebHelpers Hinweis
Microsoft-Web-Helpers wurde durch Microsoft.AspNet.WebHelpers ersetzt. Sie sollten zuerst das alte Paket entfernen und dann das neuere Paket installieren.
Es gibt keine versionsübergreifende Kompatibilität zwischen wichtigen ASP.NET Paketen. Beispielsweise ist MVC 5 nur mit Razor 3 und nicht mit Razor 2 kompatibel.
Öffnen Sie Ihr Projekt in Visual Studio.
Entfernen Sie eines der folgenden ASP.NET NuGet-Pakete, die installiert sind. Sie entfernen diese mithilfe der Paket-Manager-Konsole (PMC). Um den PMC zu öffnen, wählen Sie das Menü Extras und dann NuGet-Paket-Manager und dann Paket-Manager-Konsole aus. Möglicherweise enthält Ihr Projekt nicht alle diese.
Microsoft.AspNet.WebPages.Administration
Dieses Paket wird in der Regel hinzugefügt, wenn ein Upgrade von MVC 3 auf MVC 4 erfolgt. Führen Sie zum Entfernen den folgenden Befehl im PMC aus:
Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
Microsoft-Web-Helpers
Dieses Paket wurde inMicrosoft.AspNet.WebHelpers
umbenannt. Führen Sie zum Entfernen den folgenden Befehl im PMC aus:
Uninstall-Package -Id Microsoft-Web-Helpers
Microsoft.AspNet.Mvc.FixedDisplayMode
Dieses Paket enthält eine Umgehung für einen Fehler in MVC 4, der in MVC 5 behoben wurde. Führen Sie zum Entfernen den folgenden Befehl im PMC aus:
Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
Aktualisieren Sie alle ASP.NET NuGet-Pakete mithilfe des PMC. Führen Sie den folgenden Befehl in der PMC aus:
Update-Package
DerUpdate-Package
Befehl ohne Parameter aktualisiert jedes Paket. Sie können Pakete einzeln aktualisieren, indem Sie das ID-Argument verwenden. Führen Sie weitere Informationen zum Updatebefehl ausget-help update-package
.
Aktualisieren der Anwendungsdateiweb.config
Stellen Sie sicher, dass Sie diese Änderungen in der App web.config-Datei vornehmen, nicht in der web.config-Datei im Ordner Ansichten .
Suchen Sie den <runtime>/<assemblyBinding>
Abschnitt, und nehmen Sie die folgenden Änderungen vor:
Ändern Sie in den Elementen mit dem Namensattribute "System.Web.Mvc" die Versionsnummer von "4.0.0.0" in "5.0.0.0". (Zwei Änderungen an diesem Element.)
Ändern Sie in Elementen mit dem Namensattribute "System.Web.Helpers" und "System.Web.WebPages" die Versionsnummer von "2.0.0.0" in "3.0.0.0". Es werden vier Änderungen vorgenommen, jeweils zwei in den Elementen.
<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
Suchen Sie den
<appSettings>
Abschnitt, und aktualisieren Sie die Webseiten:Version von 2.0.0.0 auf 3.0.0. wie unten dargestellt:<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>
Entfernen Sie alle anderen Vertrauensstufen als Vollständig. Zum Beispiel:
<securityPolicy> <!--<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>--> </securityPolicy>
Aktualisieren der web.config Dateien im Ordner Ansichten
Wenn Ihre Anwendung Bereiche verwendet, müssen Sie auch jede web.config Datei im Unterordner Ansichten jedes Ordners Bereich aktualisieren.
Aktualisieren Sie alle Elemente, die "System.Web.Mvc" von Version "4.0.0.0" auf Version "5.0.0.0" enthalten.
<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>
Aktualisieren Sie alle Elemente, die "System.Web.WebPages.Razor" von Version "2.0.0.0" auf Version "3.0.0.0" enthalten. Wenn dieser Abschnitt "System.Web.WebPages" enthält, aktualisieren Sie diese Elemente von Version "2.0.0.0" auf 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>
Wenn Sie das
Microsoft-Web-Helpers
NuGet-Paket in einem vorherigen Schritt entfernt haben, installieren SieMicrosoft.AspNet.WebHelpers
mit dem folgenden Befehl im PMC:
Install-Package -Id Microsoft.AspNet.WebHelpers
Wenn Ihre App die User.IsInRole()- Methode verwendet, fügen Sie der dateiWeb.config Folgendes hinzu.
<system.webServer> <modules> <remove name="RoleManager" /> </modules> </system.webServer>
Abschließende Schritte
Erstellen und testen Sie die Anwendung.
Entfernen Sie die MVC 4-Projekttyp-GUID aus den Projektdateien.
- Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie dann Projekt entladen aus.
- Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie ProjectName.csproj bearbeiten aus.
- Suchen Sie nach dem
ProjectTypeGuids
Element, und entfernen Sie dann die MVC 4-Projekt-GUID.{E3E379DF-F4C6-4180-9B81-6769533ABE47}
- Speichern und schließen Sie die geöffnete Projektdatei.
- Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie Projekt neu laden aus.