Lan*_*ngo 61 c# asp.net-mvc c#-4.0
我有一个项目,我已经更新
编译我尝试使用或设置@ViewBag.Title属性时收到错误.
无法找到编译动态表达式所需的一种或多种类型.您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用?
我做了以下事情
我不知道还能做什么?
编辑:
我注意到在GAC Gui中有System.Core 3.5.0.0但没有System.Core 4.0.0.0.这是否意味着它变得困惑并仍在使用以前的版本?或者我误解了GAC?
编辑:
我的web.config看起来如下
...
<compilation debug="true">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
....
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.WebPages"/>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Linq" />
<add namespace="System.Collections.Generic" />
</namespaces>
</pages>
....
Run Code Online (Sandbox Code Playgroud)
cen*_*cru 63
对于它的价值,当我遇到这种情况时(在从MVC2自动转换为MVC3的项目中),我所要做的就是添加一个项目引用到Microsoft.CSharp.在我的情况下,web.config已经有了这里提到的4.0引用,我假设升级脚本.
Lan*_*ngo 49
好的,我让它使用以下步骤.
<compilation debug="true">,以<compilation debug="true" targetFramework="4.0">在system.web节<providerOption name="CompilerVersion" value="v3.5" />,以<providerOption name="CompilerVersion" value="v4.0" />在编译器部分ViewEngines.Engines.Add(new RazorViewEngine());了该Application_Start()方法我认为就是这样.
小智 34
您必须将Microsoft.CSharp.dll版本的参考 - v4.0.30319添加到项目中.在执行VS 2010之后,可以在C:\ Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll中找到它
小智 12
对我来说,解决方案是添加:
ViewEngines.Engines.Add(new RazorViewEngine());
Run Code Online (Sandbox Code Playgroud)
到了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
Run Code Online (Sandbox Code Playgroud)
要删除对旧版System.Core的引用,我执行了以下步骤:
- cd %systemroot%\assembly\
Run Code Online (Sandbox Code Playgroud)
从这里你可能有一个"gac"目录,所以你必须在每个目录中搜索才能找到你的组件.对我来说,它位于"gac_MSIL"目录中.
- cd gac_msil
- cd System.Core
- cd <assembly version number>__<public key token>
- erase *.* Say "y" to are you sure.
- cd ..
- rd <assembly version number>__<public key token>
- cd ..
- rd System.Core
Run Code Online (Sandbox Code Playgroud)
现在我在视觉研究中再次打开我的解决方案并且错误消失了,它正确地引用了System.Core 4.0并且我不再获得动态错误:)
我希望它也能帮助你,Best,N.
这是我的决议:
1)转到项目的参考
2)右键单击Microsoft.CSharp - > Properties
3)如果将其复制为True,则将Copy Local更改为False.
如果在MVC视图中看到该消息,则需要在Views\web.config中添加引用,如下所示:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
(... other references ...)
<add namespace="Microsoft.CSharp" /> <-- Add this
(...)
</namespaces>
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
不要忘记进行构建,否则更改不会生效.