如何将 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 到下一个版本的中断性变更的信息,请参阅Visual Studio 2013发行说明 ASP.NET 和 Web 工具。

本文由杨俊红和里克·安德森 ( @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

    注意

    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 中已修复的 bug 的解决方法,该 bug 已在 MVC 5 中修复。 若要删除它,请在 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”。 (该 element 中的两个更改。)

  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>找到 部分并将网页: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. 删除除 Full 以外的任何信任级别。 例如:

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

更新 Views 文件夹下的 web.config 文件

如果应用程序正在使用区域,则还需要更新每个区域文件夹的 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. 右键单击该项目,然后选择“ 重新加载项目”。