我有一个项目,我已经更新
.NET 3.5 MVC v2到
.NET 4.0 MVC v3
编译我尝试使用或设置@ViewBag.Title
属性时收到错误.
无法找到编译动态表达式所需的一种或多种类型.您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用?
我做了以下事情
遵循升级步骤
将Project/Properties/Application选项卡中的目标框架设置为.NET Framwework 4
手动添加了System.Core框架
添加了Microsoft.CSharp框架
添加了System.Xml框架
添加了System.Xml.Linq框架
确保我的Web.Config是正确的(它由Web.Debug.Config等编写)
创建了模型,控制器和Razor View
创建__Layout.cshtml_
我不知道还能做什么?
编辑:
我注意到在GAC Gui中有System.Core 3.5.0.0但没有System.Core 4.0.0.0.这是否意味着它变得困惑并仍在使用以前的版本?或者我误解了GAC?
编辑:
我的web.config看起来如下
....... ....
centralscru.. 63
对于它的价值,当我遇到这种情况时(在从MVC2自动转换为MVC3的项目中),我所要做的就是添加一个项目引用到Microsoft.CSharp.在我的情况下,web.config已经有了这里提到的4.0引用,我假设升级脚本.
对于它的价值,当我遇到这种情况时(在从MVC2自动转换为MVC3的项目中),我所要做的就是添加一个项目引用到Microsoft.CSharp.在我的情况下,web.config已经有了这里提到的4.0引用,我假设升级脚本.
好的,我让它使用以下步骤.
在配置文件中我改变
,以
在system.web节
在配置文件中我改变
,以
在编译器部分
在Global.asax.cs中,我添加ViewEngines.Engines.Add(new RazorViewEngine());
了该Application_Start()
方法
我认为就是这样.
您必须将Microsoft.CSharp.dll版本的参考 - v4.0.30319添加到项目中.在执行VS 2010之后,可以在C:\ Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll中找到它
对我来说,解决方案是添加:
ViewEngines.Engines.Add(new RazorViewEngine());
到了Application_Start()
方法global.asax.cs
.
看起来您正在web.config中导入System.Core 3.5.您需要从4.0框架导入System.Core,因为ViewBag需要System.Dynamic命名空间.
在我的机器上,它看起来像System.Core v4.0.30319
我用以下方式解决了它:
首先我注意到使用gacutil(全局程序集缓存实用程序),它包含两个对System.Core的引用,一个引用到4.0版,一个引用到3.5版.显然在剃刀视图中,即使在项目中我有正确的4.0版本引用,它仍然使用版本3.5,这就是为什么我得到关于动态类型的错误.要检查您的案例是否以管理员身份打开Visual Studio命令提示符并执行:
gacutil -l System.Core
要删除对旧版System.Core的引用,我执行了以下步骤:
- cd %systemroot%\assembly\
从这里你可能有一个"gac"目录,所以你必须在每个目录中搜索才能找到你的组件.对我来说,它位于"gac_MSIL"目录中.
- cd gac_msil - cd System.Core - cd__ - erase *.* Say "y" to are you sure. - cd .. - rd __ - cd .. - rd System.Core
现在我在视觉研究中再次打开我的解决方案并且错误消失了,它正确地引用了System.Core 4.0并且我不再获得动态错误:)
我希望它也能帮助你,Best,N.
这是我的决议:
1)转到项目的参考
2)右键单击Microsoft.CSharp - > Properties
3)如果将其复制为True,则将Copy Local更改为False.
如果在MVC视图中看到该消息,则需要在Views\web.config中添加引用,如下所示:
(... other references ...) <-- Add this (...)
不要忘记进行构建,否则更改不会生效.