You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2013升级至MVC 5时遇到的各类错误

解决.NET 4.6 + MVC 5升级后ViewBag动态表达式编译错误

刚把项目从.NET4.0+MVC4升级到.NET4.6+MVC5就碰到这种ViewBag的动态表达式错误?太正常了,我帮你整理几个亲测有效的解决步骤:

  • 先检查项目根目录的Web.config
    重点确认这几个配置:

    1. compilation节点的targetFramework必须是4.6,不能还停留在旧版本
    2. system.web.webPages.razor下的host factoryType要对应MVC5的版本,比如常用的5.2.7版本(注意版本号要和你NuGet安装的MVC5版本完全一致):
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    
  • 千万别漏了Views目录下的Web.config
    这个是很多人升级时忽略的点!Views里的Web.config必须同步更新:

    1. 把pages节点的pageBaseType改成System.Web.Mvc.WebViewPage,确保命名空间里包含System.Web.Mvc这些必要的引用
    2. 确认system.web/assemblies里的System.Web.Mvc引用版本正确,和根目录Web.config保持一致
    3. 检查appSettings里的webpages:Version,MVC5对应的是3.0.0.0,如果还是2.0.0.0(MVC4的版本),肯定会报错:
    <add key="webpages:Version" value="3.0.0.0" />
    
  • 清理缓存+重启VS,别嫌麻烦
    旧的编译缓存经常搞事情,按这个步骤来:

    1. 右键解决方案 → 清理解决方案
    2. 手动删掉项目目录下的bin和obj文件夹
    3. 关掉Visual Studio再重新打开
    4. 重新生成整个解决方案
  • 确认引用了Microsoft.CSharp程序集
    动态表达式编译依赖这个程序集,很多时候升级后会不小心丢了:
    右键项目 → 添加引用 → 找到“程序集”→“框架”→ 勾选Microsoft.CSharp,确定就行。

  • 最后再核对一遍NuGet包版本
    虽然你说更新了所有包,但还是确认下这几个核心包的版本要匹配:

    • Microsoft.AspNet.Mvc(必须是5.x系列,比如5.2.7)
    • Microsoft.AspNet.Razor(对应3.2.7版本,和MVC5配套)
    • Microsoft.AspNet.WebPages(同样要3.2.7版本)
      如果有版本不一致的,先卸载旧包,再重新安装对应版本的包。

补充:你提到的关联错误(虽然没贴全内容),十有八九也是因为上面的配置不匹配导致的,比如Razor引擎版本不对,没法正确识别MVC5的动态类型,按上面的步骤改完应该一起解决了。

内容的提问来源于stack exchange,提问作者ACetin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:14:05