如何將 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 \(英文\)。

本逐步解說將引導您完成將應用程式升級至最新版本所需的步驟。

注意

如需從 MVC 4 和 Web API 到下一個版本的重大變更相關資訊,請參閱ASP.NET 和 Web 工具 Visual Studio 2013 版本資訊

本文是由 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 的新元件重新編譯這些套件。

    套件識別碼 舊版 新版本
    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

    注意

    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 4 中已修正 MVC 5 中 Bug 的因應措施。 若要移除它,請在 PMC 中執行下列命令:
      Uninstall-Package -Id Microsoft.AspNet.Mvc.FixedDisplayModes
  6. 使用 PMC 升級所有 ASP.NET NuGet 套件。 在 PMC 中,執行下列命令:
    Update-Package
    Update-Package不含任何參數的命令將會更新每個套件。 您可以使用 ID 引數個別更新套件。 如需更新命令的詳細資訊,請執行 get-help update-package

更新應用程式 web.config 檔案

請務必在應用程式web.config檔案中進行這些變更,而不是Views資料夾中的web.config檔案。

找出 區 <runtime>/<assemblyBinding> 段,並進行下列變更:

  1. 在名稱屬性為 「System.Web.Mvc」 的專案中,將版本號碼從 「4.0.0.0」 變更為 「5.0.0.0」。 (該元素中的兩個變更。)

  2. 在名稱屬性為 「System.Web.Helpers」 和 「System.Web.WebPages」 的元素中,將版本號碼從 「2.0.0.0」 變更為 「3.0.0.0」。 將會發生四個變更,每個元素中都會有兩個。

    <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> 段,並將網頁:版本從 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. 移除 Full 以外的任何信任層級。 例如:

    <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. 如果您在上一個步驟中移除 Microsoft-Web-Helpers NuGet 套件,請在 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. 以滑鼠右鍵按一下專案,然後選取 [ 重載專案]。