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 and Web Tools」を参照してください。

この記事は、Youngjune Hong と Rick Anderson ( @RickAndMSFT ) によって執筆されました。

アップグレードの手順

  1. プロジェクトをバックアップします。 このチュートリアルでは、プロジェクト ファイル、パッケージ構成、web.config ファイルを変更する必要があります。

  2. Web API から Web API 2 にアップグレードする場合は、global.asax で次のように変更します。

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    

    to

    GlobalConfiguration.Configure(WebApiConfig.Register);
    
  3. プロジェクトで使用するすべてのパッケージが 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 とは互換性がありません。

  4. Visual Studio でプロジェクトを開きます。

  5. インストールされている次の ASP.NET NuGet パッケージのいずれかを削除します。 これらは、パッケージ マネージャー コンソール (PMC) を使用して削除します。 PMC を開くには、[ ツール ] メニューを選択し、[ NuGet パッケージ マネージャー ] を選択してから、[ パッケージ マネージャー コンソール] を選択します。 プロジェクトにこれらのすべてが含まれていない場合があります。

    1. Microsoft.AspNet.WebPages.Administration
      このパッケージは通常、MVC 3 から MVC 4 にアップグレードするときに追加されます。 これを削除するには、PMC で次のコマンドを実行します。
      Uninstall-Package -Id Microsoft.AspNet.WebPages.Administration
    2. Microsoft-Web-Helpers
      このパッケージは として Microsoft.AspNet.WebHelpersブランド変更されました。 これを削除するには、PMC で次のコマンドを実行します。
      Uninstall-Package -Id Microsoft-Web-Helpers
    3. Microsoft.AspNet.Mvc.FixedDisplayMode
      このパッケージには、MVC 5 で修正された MVC 4 のバグに関する回避策が含まれています。 これを削除するには、PMC で次のコマンドを実行します。
      Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
  6. PMC を使用して、ASP.NET NuGet パッケージをすべてアップグレードします。 PMC で次のコマンドを実行します。
    Update-Package
    パラメーターを指定しないコマンドは Update-Package 、すべてのパッケージを更新します。 ID 引数を使用してパッケージを個別に更新できます。 update コマンドの詳細については、 を実行 get-help update-package します。

アプリケーション web.config ファイルを更新する

これらの変更は、Views フォルダー内のweb.config ファイルではなく、アプリ web.config ファイルで行ってください。

セクションを <runtime>/<assemblyBinding> 見つけて、次の変更を行います。

  1. name 属性が "System.Web.Mvc" の要素で、バージョン番号を "4.0.0.0" から "5.0.0.0" に変更します。 (その要素の 2 つの変更)。

  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
    
  3. セクションを <appSettings> 見つけて、次に示すように Web ページ: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>
    
  4. [完全] 以外の信頼レベルを削除します。 次に例を示します。

    <securityPolicy>
       <!--<trustLevel name="Medium"  policyFile="web_mediumtrust.config"/>-->
    </securityPolicy>
    

Views フォルダーの 下にあるweb.config ファイルを更新する

アプリケーションで領域を使用している場合は、各 Area フォルダーの Views サブフォルダー内の各web.config ファイルも更新する必要があります。

  1. "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>
    
  2. "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>
    
  3. 前の手順で NuGet パッケージを Microsoft-Web-Helpers 削除した場合は、PMC で次のコマンドを使用してインストール Microsoft.AspNet.WebHelpers します。
    Install-Package -Id Microsoft.AspNet.WebHelpers

  4. アプリで User.IsInRole() メソッドを使用している場合は、Web.configファイルに次の コード を追加します。

    <system.webServer>
        <modules>
          <remove name="RoleManager" />
        </modules>
      </system.webServer>
    

最終ステップ

アプリケーションをビルドしてテストします。

MVC 4 プロジェクトの種類 GUID をプロジェクト ファイルから削除します。

  1. ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロジェクトのアンロード] を選択します。
  2. プロジェクトを右クリックし、[ProjectName.csproj の編集] を選択します。
  3. 要素を ProjectTypeGuids 見つけて、MVC 4 プロジェクト GUID を {E3E379DF-F4C6-4180-9B81-6769533ABE47}削除します。
  4. 開いているプロジェクト ファイルを保存して閉じます。
  5. プロジェクトを右クリックし、[プロジェクトの 再読み込み] を選択します。