ASP.NET MVC 4 Beta 发行说明

本文档介绍适用于 Visual Studio 2010 的 ASP.NET MVC 4 Beta 版本。

注意

这不是最新版本。 此处提供了 ASP.NET MVC 4 RC 发行说明。

安装说明

可以使用 Web 平台安装程序从 ASP.NET MVC 4 主页安装 ASP.NET MVC 4 Beta for Visual Studio 2010。

在安装 ASP.NET MVC 4 Beta 之前,必须卸载以前安装的任何 ASP.NET MVC 4 预览版。

此版本与 .NET Framework 4.5 开发人员预览版不兼容。 在安装 ASP.NET MVC 4 Beta 之前,必须卸载 .NET 4.5 开发人员预览版。

ASP.NET MVC 4 可以安装,并且可以与 ASP.NET MVC 3 并行运行。

文档

ASP.NET MVC 的文档可以在位于以下 URL 的 MSDN 网站上找到:

https://go.microsoft.com/fwlink/?LinkID=243043

有关 ASP.NET MVC 的教程和其他信息,请参阅 ASP.NET 网站的 MVC 4 页面 (https://www.asp.net/mvc/mvc4) 。

支持

这是预览版,不受官方支持。 如果你对使用此版本有疑问,请将其发布到 ASP.NET MVC 论坛 (https://forums.asp.net/1146.aspx) ,ASP.NET 社区的成员经常能够在此论坛中提供非正式支持。

软件要求

Visual Studio ASP.NET MVC 4 组件需要 PowerShell 2.0 和带有 Service Pack 1 的 Visual Studio 2010 或带有 Service Pack 1 的 Visual Web Developer Express 2010。

将 ASP.NET MVC 3 项目升级到 ASP.NET MVC 4

ASP.NET MVC 4 可以与 ASP.NET MVC 3 并排安装在同一台计算机上,这使你可以灵活地选择何时将 ASP.NET MVC 3 应用程序升级到 ASP.NET MVC 4。

最简单的升级方法是创建新的 ASP.NET MVC 4 项目,将所有视图、控制器、代码和内容文件从现有 MVC 3 项目复制到新项目,然后更新新项目中的程序集引用以匹配旧项目。 如果对 MVC 3 项目中的 Web.config 文件进行了更改,则还必须将这些更改合并到 MVC 4 项目中的 Web.config 文件中。

若要手动将现有 ASP.NET MVC 3 应用程序升级到版本 4,请执行以下操作:

  1. 在项目 (的所有Web.config文件中,项目根目录中都有一个文件,一个位于 Views 文件夹中,一个位于项目) 每个区域的 Views 文件夹中,替换以下文本的每个实例:

    System.Web.Mvc, Version=3.0.0.0
    System.Web.WebPages, Version=1.0.0.0
    System.Web.Helpers, Version=1.0.0.0
    System.Web.WebPages.Razor, Version=1.0.0.0
    

    替换为以下相应文本:

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0,
     System.Web.WebPages.Razor, Version=2.0.0.0,
    
  2. 在根Web.config文件中,将 webPages:Version 元素更新为“2.0.0.0”,并添加值为“true”的新 PreserveLoginUrl 键:

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. 在 解决方案资源管理器 中删除指向版本 3 DLL) 的 System.Web.Mvc (引用。 然后添加对 System.Web.Mvc (v4.0.0.0) 的引用。 具体而言,请进行以下更改以更新程序集引用。 以下是详细信息:

    1. 在 解决方案资源管理器 中删除对以下程序集的引用:

      • System.Web.Mvc (v3.0.0.0)
      • System.Web.WebPages (v1.0.0.0)
      • System.Web.Razor (v1.0.0.0)
      • System.Web.WebPages.Deployment (v1.0.0.0)
      • System.Web.WebPages.Razor (v1.0.0.0)
    2. 添加对以下程序集的引用:

      • System.Web.Mvc (v4.0.0.0)
      • System.Web.WebPages (v2.0.0.0)
      • System.Web.Razor (v2.0.0.0)
      • System.Web.WebPages.Deployment (v2.0.0.0)
      • System.Web.WebPages.Razor (v2.0.0.0)
  4. 在解决方案资源管理器中,右键单击项目名称,然后选择“卸载项目”。 然后再次右键单击该名称,并选择“编辑 ProjectName.csproj”。

  5. 找到 ProjectTypeGuids 元素,并将 {E53F8FEA-EAE0-44A6-8774-FFD645390401} 替换为 {E3E379DF-F4C6-4180-9B81-6769533ABE47}。

  6. 保存更改,关闭正在编辑的项目 (.csproj) 文件,右键单击该项目,然后选择“重新加载项目”。

  7. 如果项目引用使用以前版本的 ASP.NET MVC 编译的任何第三方库,请打开根Web.config文件,并在配置节下添加以下三个 bindingRedirect 元素:

    <configuration>
      <!--... elements deleted for clarity ...-->
     
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

ASP.NET MVC 4 Beta 版中的新增功能

本部分介绍 ASP.NET MVC 4 Beta 版中引入的功能。

ASP.NET Web API

ASP.NET MVC 4 现在包括 ASP.NET Web API,这是一种用于创建 HTTP 服务的新框架,可覆盖各种客户端,包括浏览器和移动设备。 ASP.NET Web API也是构建 RESTful 服务的理想平台。

ASP.NET Web API包括对以下功能的支持:

  • 新式 HTTP 编程模型: 使用新的强类型 HTTP 对象模型直接访问和操作 Web API 中的 HTTP 请求和响应。 相同的编程模型和 HTTP 管道通过新的 HttpClient 类型在客户端上对称可用。
  • 对路由的完全支持:Web API 现在支持一直是 Web 堆栈的一部分的完整路由功能集,包括路由参数和约束。 此外,映射到操作完全支持约定,因此不再需要将 [HttpPost] 等属性应用于类和方法。
  • 内容协商:客户端和服务器可以协同工作,为从 API 返回的数据确定正确的格式。 我们提供了对 XML、JSON 和表单 URL 编码格式的默认支持,你可以通过添加自己的格式化程序来扩展此支持,甚至替换默认的内容协商策略。
  • 模型绑定和验证: 模型绑定器提供了一种简单的方法,用于从 HTTP 请求的各个部分提取数据,并将这些消息部分转换为可供 Web API 操作使用的 .NET 对象。
  • 过滤 器: Web API 现在支持筛选器,包括 [Authorize] 属性等已知筛选器。 可以创作和插入自己的筛选器,用于操作、授权和异常处理。
  • 查询组合: 只需返回 IQueryable<T>,Web API 即可支持通过 OData URL 约定进行查询。
  • 改进了 HTTP 详细信息的可测试性: Web API 操作现在可以处理 HttpRequestMessage 和 HttpResponseMessage 的实例,而不是在静态上下文对象中设置 HTTP 详细信息。 这些对象的泛型版本也存在,以便除 HTTP 类型外,还可以使用自定义类型。
  • 改进了通过 DependencyResolver (IoC) 的控制反转: Web API 现在使用 MVC 的依赖项解析程序实现的服务定位器模式来获取许多不同设施的实例。
  • 基于代码的配置: Web API 配置完全通过代码完成,使配置文件保持干净。
  • 自承载: 除了 IIS 之外,还可以在你自己的进程中托管 Web API,同时仍使用完整的路由功能以及 Web API 的其他功能。

有关 ASP.NET Web API的详细信息,请访问 https://www.asp.net/web-api

ASP.NET 单页应用程序

ASP.NET MVC 4 现在包括使用 JavaScript 和 Web API 生成具有重要客户端交互的单页应用程序体验的早期预览版。 此支持包括:

  • 一组 JavaScript 库,用于与缓存数据进行更丰富的本地交互
  • 用于工作单元和 DAL 支持的其他 Web API 组件
  • 具有基架的 MVC 项目模板,用于快速入门

有关 ASP.NET MVC 4 中单页应用程序支持的更多详细信息,请访问 https://www.asp.net/single-page-application

默认项目模板的增强功能

用于创建新 ASP.NET MVC 4 项目的模板已更新,以创建外观更现代的网站:

默认项目模板的浏览器视图的屏幕截图。

除了外观改进之外,新模板中还改进了功能。 该模板采用一种称为自适应呈现的技术,在桌面浏览器和移动浏览器中都显示良好,无需任何自定义。

默认项目模板的移动浏览器视图的屏幕截图。

若要查看自适应呈现效果,可以使用移动模拟器,也可以尝试将桌面浏览器窗口大小调整为更小。 当浏览器窗口足够小时,页面布局将更改。

默认项目模板的另一个增强功能是使用 JavaScript 提供更丰富的 UI。 模板中使用的登录和注册链接是如何使用 jQuery UI 对话框显示丰富登录屏幕的示例:

屏幕上的默认项目模板日志的屏幕截图。

移动项目模板

如果你正在启动一个新项目,并且想要创建一个专门用于移动和平板电脑浏览器的网站,则可以使用新的移动应用程序项目模板。 这基于 jQuery Mobile,这是一个用于生成触摸优化 UI 的开源库:

屏幕上默认项目模板日志的移动浏览器视图的屏幕截图。

此模板包含与 Internet 应用程序模板相同的应用程序结构 (并且控制器代码) 几乎相同,但它使用 jQuery Mobile 进行了样式设置,在基于触摸的移动设备上外观良好且行为良好。 若要详细了解如何构建移动 UI 并设置其样式,请参阅 jQuery Mobile 项目网站

如果你已有一个面向桌面的网站,你想要向其添加移动优化视图,或者想要创建一个为桌面浏览器和移动浏览器提供不同样式的视图的网站,则可以使用新的显示模式功能。 (请参阅下一节。)

显示模式

新的显示模式功能允许应用程序根据发出请求的浏览器选择视图。 例如,如果桌面浏览器请求主页,应用程序可能会使用 Views\Home\Index.cshtml 模板。 如果移动浏览器请求主页,应用程序可能会返回 Views\Home\Index.mobile.cshtml 模板。

对于特定浏览器类型,也可以重写布局和分部。 例如:

  • 如果 Views\Shared 文件夹同时包含 _Layout.cshtml 和 _Layout.mobile.cshtml 模板,则默认情况下,应用程序将在来自移动浏览器的请求期间使用 _Layout.mobile.cshtml,在其他请求期间使用 _Layout.cshtml。
  • 如果文件夹同时包含 _MyPartial.cshtml 和 _MyPartial.mobile.cshtml,则指令 @Html.Partial(“_MyPartial”) 将在来自移动浏览器的请求期间呈现_MyPartial.mobile.cshtml,并在其他请求期间呈现_MyPartial.cshtml。

如果要为其他设备创建更具体的视图、布局或部分视图,可以注册新的 DefaultDisplayMode 实例,以指定在请求满足特定条件时要搜索的名称。 例如,可以将以下代码添加到 Global.asax 文件中的 Application_Start 方法,以将字符串“iPhone”注册为 Apple iPhone 浏览器发出请求时应用的显示模式:

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
 });

运行此代码后,当 Apple iPhone 浏览器发出请求时,应用程序将使用 Views\Shared\_Layout.iPhone.cshtml 布局 ((如果存在) )。

jQuery Mobile、视图切换器和浏览器重写

jQuery Mobile 是用于构建触摸优化 Web UI 的开放源代码库。 如果要将 jQuery Mobile 与 ASP.NET MVC 4 应用程序配合使用,可以下载并安装一个 NuGet 包来帮助你入门。 若要从 Visual Studio 包管理器控制台安装它,请键入以下命令:

Install-Package jQuery.Mobile.MVC

这会安装 jQuery Mobile 和一些帮助程序文件,包括:

  • Views/Shared/_Layout.Mobile.cshtml,它是基于移动的 jQuery 布局。
  • 视图切换器组件,它由 Views/Shared/_ViewSwitcher.cshtml 分部视图和 ViewSwitcherController.cs 控制器组成。

安装包后,使用移动浏览器 (或类似的浏览器(如 Firefox 用户代理切换器 加载项) )运行应用程序。 你将看到页面外观大不相同,因为 jQuery Mobile 处理布局和样式设置。 若要利用这一点,可以执行以下操作:

  • 创建特定于移动的视图替代,如前面的 显示模式 中所述 (例如,创建 Views\Home\Index.mobile.cshtml 以替代移动浏览器的 Views\Home\Index.cshtml) 。
  • 阅读 jQuery Mobile 文档 ,详细了解如何在移动视图中添加触摸优化 UI 元素。

移动优化网页的约定是添加一个链接,其文本类似于桌面视图或完整网站模式,允许用户切换到页面的桌面版本。 jQuery.Mobile.MVC 包包含用于此目的的示例视图切换器组件。 它在默认 Views\Shared\_Layout.Mobile.cshtml 视图中使用,呈现页面时如下所示:

移动视图和桌面视图链接的屏幕截图。

如果访问者单击该链接,他们将切换到同一页面的桌面版本。

由于桌面布局默认不包含视图切换器,因此访问者无法进入移动模式。 若要启用此功能,请将以下引用添加到桌面布局_ViewSwitcher,就在 body> 元素中<

<body>
    @Html.Partial("_ViewSwitcher")
    ...

视图切换器使用名为“浏览器重写”的新功能。 此功能可让应用程序将请求视为来自不同浏览器 (用户代理) ,而不是实际来自的浏览器。 下表列出了浏览器重写提供的方法。

HttpContext.SetOverriddenBrowser(userAgentString) 使用指定的用户代理,重写请求的实际用户代理值。
HttpContext.GetOverriddenUserAgent() 返回请求的用户代理替代值,如果未指定替代,则返回实际用户代理字符串。
HttpContext.GetOverriddenBrowser() 返回一个 HttpBrowserCapabilitiesBase 实例,该实例对应于当前为请求设置 (实际或重写) 的用户代理。 可以使用此值获取 IsMobileDevice 等属性。
HttpContext.ClearOverriddenBrowser() 删除任何针对当前请求重写的用户代理。

浏览器替代是 ASP.NET MVC 4 的核心功能,即使未安装 jQuery.Mobile.MVC 包,也可用。 但是,它只影响视图、布局和部分视图选择,它不会影响依赖于 Request.Browser 对象的任何其他 ASP.NET 功能。

默认情况下,使用 Cookie 存储用户代理替代。 如果要将替代存储在其他位置(例如, (数据库) 中),可以替换默认提供程序 (BrowserOverrideStores.Current) 。 此提供程序的文档将随附 ASP.NET MVC 的更高版本。

Visual Studio 中的代码生成方案

新的 Recipes 功能使 Visual Studio 能够基于可以使用 NuGet 安装的包生成特定于解决方案的代码。 借助 Recipes 框架,开发人员可以轻松编写代码生成插件,还可以使用这些插件替换添加区域、添加控制器和添加视图的内置代码生成器。 由于食谱部署为 NuGet 包,因此可以轻松地将其签入源代码管理,并自动与项目上的所有开发人员共享。 它们也基于每个解决方案提供。

异步控制器的任务支持

现在可以将异步操作方法编写为返回 TaskTask<ActionResult> 类型的对象的单个方法。

例如,如果使用 Visual C# 5 (或使用 Async CTP) ,则可以创建如下所示的异步操作方法:

public async Task<ActionResult> Index(string city) {
    var newsService = new NewsService();
    var sportsService = new SportsService();
    
    return View("Common",
        new PortalViewModel {
        NewsHeadlines = await newsService.GetHeadlinesAsync(),
        SportsScores = await sportsService.GetScoresAsync()
    });
}

在前面的操作方法中,对 newsService.GetHeadlinesAsyncsportsService.GetScoresAsync 的调用是异步调用的,不会阻止线程池中的线程。

返回 Task 实例的异步操作方法也可以支持超时。 若要使操作方法可取消,请将 CancellationToken 类型的参数添加到操作方法签名。 以下示例演示了一个异步操作方法,该方法的超时时间为 2500 毫秒,并在发生超时时向客户端显示 TimedOut 视图。

[AsyncTimeout(2500)]
[HandleError(ExceptionType = typeof(TaskCanceledException), View = "TimedOut")]
public async Task<ActionResult> Index(string city,
    CancellationToken cancellationToken) {
    var newsService = new NewsService();
    var sportsService = new SportsService();
   
    return View("Common",
        new PortalViewModel {
        NewsHeadlines = await newsService.GetHeadlinesAsync(cancellationToken),
        SportsScores = await sportsService.GetScoresAsync(cancellationToken)
    });
}

Azure SDK

ASP.NET MVC 4 Beta 版支持 2011 年 9 月版 1.5 版的 Windows Azure SDK。

已知问题和中断性变更

  • 安装 ASP.NET MVC 4 Beta 后,Visual Studio 2010 Service Pack 1 CSHTML/VBHTML 编辑器中的 CSHTML/VBHTML 编辑器可能会在在 cshtml 或 vbhtml 文件中键入代码片段或 JavaScript 后长时间暂停。 仅在 ASP.NET 刚刚创建且尚未编译的 MVC 4 应用程序中发生此情况。

    解决方法是编译项目以获取 bin 文件夹中的程序集。 请注意,如果清理从 bin 文件夹中删除程序集的项目,编辑器问题将重新出现。

    将在下一个版本中更正此问题。

  • 适用于 Visual Studio 11 Beta 的 C# 项目模板在 Global.asax.cs 中包含不正确的连接字符串。 在 Visual Studio 11 Beta 中创建的项目的 Application_Start 方法中指定的默认连接包含一个 LocalDB 连接字符串,其中包含一个未转义的反斜杠 () 字符。 这会导致在尝试访问生成 SqlException 的 Entity Framework DbContext 时出现连接错误。

    若要更正此问题,请转义 Global.asax.cs 的 App_Start 方法中的反斜杠字符,使其如下所示:

    Database.DefaultConnectionFactory = 
       new SqlConnectionFactory(
         "Data Source=(localdb)\\v11.0; Integrated Security=True; MultipleActiveResultSets=True");
    
  • ASP.NET 在 .NET 4.0 下运行时,尝试访问 System.Net.Http.dll 程序集时,面向 .NET 4.5 的 MVC 4 应用程序将引发 FileLoadException。 ASP.NET 在 .NET 4.5 下创建的 MVC 4 应用程序包含一个绑定重定向,当应用程序在安装了 .NET 4.0 的系统上执行时,会导致 FileLoadException,指出“无法加载文件或程序集'System.Net.Http'或其依赖项之一”。 若要更正此问题,请从 web.config 中删除以下绑定重定向:

    <dependentAssembly>
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" 
        culture="neutral" />
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    

    修改后的web.config中的程序集绑定元素应如下所示:

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
      <assemblyIdentity name="System.Web.Helpers" 
        publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
     </dependentAssembly>
     <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" 
        publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
     </dependentAssembly>
     <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" 
        publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
     </dependentAssembly>
    </assemblyBinding>
    
  • 从区域内部调用时,Visual Basic 项目中的“添加控制器”项模板会生成不正确的命名空间。将控制器添加到使用 Visual Basic 的 ASP.NET MVC 项目中的区域时,项模板会将错误的命名空间插入控制器。 导航到控制器中的任何操作时,结果为“找不到文件”错误。

    生成的命名空间省略根命名空间后的所有内容。 例如,生成的命名空间是 RootNamespace ,但应该是 RootNamespace.Areas.AreaName.Controllers

  • Razor 视图引擎中的中断性变更。 作为重写 Razor 分析程序的一部分,以下类型已从 System.Web.Mvc.Razor 中删除:

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    还删除了以下方法:

    • MvcCSharpRazorCodeParser.ParseInheritsStatement (System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator (System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement (System.Web.Razor.Parser.CodeBlockInfo)
  • 当 WebMatrix.WebData.dll 包含在 ASP.NET MVC 4 应用的 /bin 目录中时,它将接管表单身份验证的 URL。 例如,将WebMatrix.WebData.dll程序集添加到应用程序 (,方法是在使用“添加可部署依赖项”对话框时选择“使用 Razor 语法 ASP.NET 网页”,) 将替代默认 ASP.NET MVC 帐户控制器预期的身份验证登录重定向到 /account/logon 而不是 /account/login。 若要防止此行为并使用已在 web.config 身份验证部分中指定的 URL,可以添加名为 PreserveLoginUrl 的 appSetting 并将其设置为 true:

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • 尝试安装 ASP.NET MVC 4 以并行安装 Visual Studio 2010 和 Visual Web Developer 2010 时,NuGet 包管理器无法安装。 若要与 ASP.NET MVC 4 并行运行 Visual Studio 2010 和 Visual Web Developer 2010,必须在安装两个版本的 Visual Studio 后安装 ASP.NET MVC 4。

  • 如果已卸载先决条件,则卸载 ASP.NET MVC 4 将失败。 若要完全卸载 ASP.NET MVC 4,必须在卸载 Visual Studio 之前卸载 MVC 4 ASP.NET。

  • 运行默认 Web API 项目会显示错误地指示用户使用 RegisterApis 方法添加路由的说明,该方法不存在。 应使用 ASP.NET 路由表在 RegisterRoutes 方法中添加路由。

  • ASP.NET MVC 4 Beta 版安装中断 ASP.NET MVC 3 RTM 应用程序。 ASP.NET 使用 RTM 版本创建的 MVC 3 应用程序 (与 ASP.NET MVC 3 工具更新版本) 需要以下更改才能与 ASP.NET MVC 4 Beta 并行工作。 在不进行这些更新的情况下生成项目会导致编译错误。

    所需的更新

    1. 在根Web.config文件中,添加一个新的 <appSettings> 条目,其中包含键 webPages:Version 和值 1.0.0.0

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. 在“解决方案资源管理器”中,右键单击项目名称,然后选择“卸载项目”。 然后再次右键单击该名称,然后选择“编辑 ProjectName.csproj”。

    3. 找到以下程序集引用:

      <Reference Include="System.Web.WebPages"/> 
      <Reference Include="System.Web.Helpers" />
      

      将它们替换为以下内容:

      <Reference Include="System.Web.WebPages, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
      <Reference Include="System.Web.Helpers, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      
    4. 保存更改,关闭正在编辑的项目 (.csproj) 文件,然后右键单击该项目并选择“重新加载”。