ASP.NET MVC 4 と Web API プロジェクトを ASP.NET MVC 5 と Web API 2 にアップグレードする
作成者: Rick Anderson
ASP.NET MVC 5 と Web API 2 では、属性ルーティング、認証フィルターなどを含む、多くの新機能が提供されます。 詳細については、 https://www.asp.net/vnext をご覧ください。
このチュートリアルでは、アプリケーションを最新バージョンにアップグレードするために必要な手順について説明します。
Note
MVC 4 と Web API から次のバージョンへの破壊的変更の詳細については、「Visual Studio 2013 の ASP.NET と Web ツールのリリース ノート」を参照してください。
この記事は、Youngjune Hong と Rick Anderson (@RickAndMSFT) が執筆しました
Upgrade Steps
プロジェクトをバックアップします。 このチュートリアルでは、プロジェクト ファイル、パッケージ構成、web.config ファイルに変更を加える必要があります。
Web API から Web API 2 にアップグレードする場合は、global.asax 内で次のように変更します。
WebApiConfig.Register(GlobalConfiguration.Configuration);
to
GlobalConfiguration.Configure(WebApiConfig.Register);
プロジェクトで使用するすべてのパッケージが、MVC 5 および Web API 2 と互換性があることを確認します。 次の表は、変更する必要がある MVC 4 と Web API 関連のパッケージを示しています。 以下に示したいずれかに依存するパッケージがある場合は、発行元に連絡して、MVC 5 および Web API 2 と互換性のある新しいバージョンを入手してください。 これらのパッケージのソース コードがある場合は、MVC 5 と Web API 2 の新しいアセンブリで再コンパイルする必要があります。
パッケージ ID 旧バージョン 新しいバージョン 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> 削除済み Microsoft.AspNet.WebPages.Administration <o:p></o:p> 削除済み Microsoft-Web-Helpers <o:p></o:p> Microsoft.AspNet.WebHelpers Note
Microsoft-Web-Helpers は Microsoft.AspNet.WebHelpers に置き換えられました。 まず旧パッケージを削除してから、新しいパッケージをインストールする必要があります。
メジャー ASP.NET パッケージ間の、バージョン間の互換性はありません。 たとえば、MVC 5 は Razor 3 のみと互換性があり、Razor 2 とはありません。
Visual Studio でプロジェクトを開きます。
インストールされている次の ASP.NET NuGet パッケージをすべて削除します。 パッケージ マネージャー コンソール (PMC) を使用してこれらを削除します。 PMC を開くには、[ツール] メニューを選択し、それから [NuGet パッケージ マネージャー] を選択して、それから [パッケージ マネージャー コンソール] を選択します。 プロジェクトにはこれらのすべてが含まれていない場合があります。
Microsoft.AspNet.WebPages.Administration
このパッケージは通常、MVC 3 から MVC 4 にアップグレードする際に追加されます。 これを削除するには、PMC 内で次のコマンドを実行します。
Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
Microsoft-Web-Helpers
このパッケージはMicrosoft.AspNet.WebHelpers
にブランド変更されました。 これを削除するには、PMC 内で次のコマンドを実行します。
Uninstall-Package -Id Microsoft-Web-Helpers
Microsoft.AspNet.Mvc.FixedDisplayMode
このパッケージには、MVC 5 内で修正された MVC 4 内のバグの回避策が含まれています。 これを削除するには、PMC 内で次のコマンドを実行します。
Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
PMC を使用して、すべての ASP.NET NuGet パッケージをアップグレードします。 PMC で次のコマンドを実行します。
Update-Package
Update-Package
コマンドでパラメーターを何も指定しなければ、すべてのパッケージが更新されます。 ID 引数を使用すると、パッケージを個別に更新できます。 update コマンドの詳細については、get-help update-package
を実行してください。
Application の web.config ファイルを更新する
これらの変更は必ず app の web.config ファイル内で行ってください (Views フォルダー内の web.config ファイルではありません)。
<runtime>/<assemblyBinding>
セクションを見つけて、次の変更を加えます。
name 属性が "System.Web.Mvc" の要素内で、バージョン番号を "4.0.0.0" から "5.0.0.0" に変更します (その要素内に 2 つの変更があります)。
name 属性が "System.Web.Helpers" と "System.Web.WebPages" の要素内で、バージョン番号を "2.0.0.0" から "3.0.0.0" に変更します。 4 つの変更を加えます (各要素内に 2 つずつ)。
<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
以下に示すように、
<appSettings>
セクションを見つけて、"webpages:version" を "2.0.0.0" から "3.0.0.0" に更新します。<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>
Full 以外の trustLevel をすべて削除します。 次に例を示します。
<securityPolicy> <!--<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>--> </securityPolicy>
Views フォルダーの下にある web.config ファイルを更新する
アプリケーションで区分を使用している場合は、各 Area フォルダーの Views サブフォルダー内にある各 web.config ファイルも更新する必要があります。
"System.Web.Mvc" を含むすべての要素で、バージョン "4.0.0.0" からバージョン "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>
"System.Web.WebPages.Razor" を含むすべての要素で、バージョン "2.0.0.0" からバージョン "3.0.0.0" に更新します。 このセクションに "System.Web.WebPages" が含まれている場合は、それらの要素で、バージョン "2.0.0.0" からバージョン"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>
前の手順内で
Microsoft-Web-Helpers
NuGet パッケージを削除した場合は、PMC 内で次のコマンドを使用してMicrosoft.AspNet.WebHelpers
をインストールします。
Install-Package -Id Microsoft.AspNet.WebHelpers
アプリで User.IsInRole() メソッドを使用する場合は、Web.config ファイルに次を追加します。
<system.webServer> <modules> <remove name="RoleManager" /> </modules> </system.webServer>
最後の手順
アプリケーションをビルドしてテストします。
MVC 4 プロジェクトの種類の GUID を、プロジェクト ファイルから削除します。
- ソリューション エクスプローラー内でプロジェクト名を右クリックし、それから [プロジェクトのアンロード] を選択します。
- プロジェクトを右クリックし、[<プロジェクト名>.csproj の編集] を選択します。
ProjectTypeGuids
要素を見つけて、MVC 4 プロジェクト GUID{E3E379DF-F4C6-4180-9B81-6769533ABE47}
を削除します。- 開いているプロジェクト ファイルを保存して閉じます。
- プロジェクトを右クリックし、[プロジェクトの再読み込み] を選択します。