我有一个项目,我已经更新
-
.NET 3.5 MVC v2 to
-
.NET 4.0 MVC v3
编译我尝试使用或设置 @ViewBag.Title
属性时收到错误 .
无法找到编译动态表达式所需的一种或多种类型 . 您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用?
我做了以下事情
-
将Project / Properties / Application选项卡中的目标框架设置为.NET Framwework 4
-
添加了System.Core框架manually
-
添加了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看起来如下
...
<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>
....
21 回答
对我来说,不是上述工作,而是设置
Copy Local = True
解决了问题对于它的 Value ,当我遇到这种情况时(在从MVC2自动转换为MVC3的项目中),我所要做的就是添加一个项目引用到Microsoft.CSharp . 在我的情况下,web.config已经有了这里提到的4.0引用,我假设升级脚本 .
好的,我让它使用以下步骤 .
在配置文件中,我在system.web部分中将
<compilation debug="true">
更改为<compilation debug="true" targetFramework="4.0">
在配置文件中,我在编译器部分将
<providerOption name="CompilerVersion" value="v3.5" />
更改为<providerOption name="CompilerVersion" value="v4.0" />
在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中找到它
对我来说,解决方案是添加:
到
global.asax.cs
中的Application_Start()
方法 .看起来您正在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命令提示符并执行:
要删除对旧版System.Core的引用,我执行了以下步骤:
从这里你可能有一个“gac”目录,所以你必须在每个目录中搜索才能找到你的组件 . 对我来说,它位于“gac_MSIL”目录中 .
现在我在视觉研究中再次打开我的解决方案并且错误消失了,它正确地引用了System.Core 4.0并且我不再获得动态错误:)
我希望它也能帮助你,Best,N .
这是我的决议:
1)转到项目的参考
2)右键单击Microsoft.CSharp - > Properties
3)如果将其复制为True,则将Copy Local更改为False .
如果在MVC视图中看到该消息,则需要在Views \ web.config中添加引用,如下所示:
不要忘记进行构建,否则更改不会生效 .
Visual Studio 2010中的默认项目应该引用Microsoft.CSharp和System.Core .
如果它们未在您的项目中引用,则需要添加它们,并且错误将消失 .
WOOW!
我差不多一年了,但仍然认为我应该根据我的调查结果(2013年7月13日太平洋标准时间7:15p)与错误信息相关 . 这可能对正在寻找错误消息答案的人有所帮助:
所以请继续阅读:当我在我的代码中实现
System.Dynamic
时,我收到了类似的错误消息 . Web应用程序运行顺利,因为我在web.config(targetframework)中有正确的配置但是当我将app_code放在一个单独的dll中时,它开始在编译时抛出错误时间 . 请注意,我的dll中没有 app.config ,因此当您在单独的dll项目中使用它时,它可能不依赖于配置,而是对正确的dll的引用 .我认为正确的
Microsoft.CSharp.dll
在"C:\Windows\Microsoft.NET\Framework\v4.0.30319"
,我的dll编译成功 .当我在项目中更新MVC版本时,我遇到了这个问题 . 问题是assemblyBinding指令,不知何故Nuget忘了更新它 .
我不得不改变
至
我在使用Microsoft.Office.Interop.Excel时收到此错误的Windows应用程序; ......运行时版本似乎在一个或多个DLL之间不兼容 .
我的解决方案:我将整个解决方案从.NET 4.0转换为.NET 3.5
为了它的地狱,我转换回4.0,我又开始收到错误 .
基于此错误尝试将您的解决方案转换为可以工作的旧.NET框架 .
==========编辑=================
2个小时后,我完成了我的Excell互操作类中的一些关键功能,它就像一个魅力......出于某种原因只在.NET 3.5而不是4.0上,我的解决方案在这个范围内有效
以上都不适合我 . 通过更多搜索和浏览Web.Config设置,我发现这个答案对我有用 .
How do I fix the "compilerVersion" IIS error?
我有一些非常相似的事情发生在我身上,虽然在我的情况下我已经升级了很多东西,包括从Visual Studio 2010到Visual Studio 2012.我已经按照上述建议的所有内容进行了操作,但仍然很痛苦 . 最后我决定重新创建整个项目 . 只有当我尝试将成员资格提供程序方面重新添加到我的web.config文件中时,突然变得很明显版本冲突对我而言 .
虽然现在看着它,但显而易见 . 提供的类型具有特定版本 . 我简单然后删除了版本,找到了合适的类型 . 因此,在我的案例中,决议是用以下内容取代上述:
然后重新编译 . 我花了好几天才找到这个,因为我正在寻找所有错误的地方!
我尝试了这个文件中的所有其他建议,但没有一个在我现有的MVC 4解决方案上工作 . 因此,在将我的VS2012更新为WebTools 2013.1 for VS 2012之后,我创建了一个新的MVC 5项目并使用新项目的文件作为基础,从我的所有web.config文件中删除了所有无关的行 .
完成后,我的所有编译错误和警告都消失了,Intellisense开始正常工作 . 完全删除主web.config文件中的<system.web> <pages>部分最终修复了ViewBag.Title(和其他)动态表达式错误 .
正如我最近发现的,一些扩展也可能导致这种情况 . 在我的情况下删除AutoHistory 1.0.1扩展为我修复它(MVC5) .
此问题的一个常见原因是您错过了更新
Views/web.config
文件中的程序集版本 . 我很容易在_1739428中错过它们,例如:我也一直在努力解决这个问题一天左右 . 在我终于在这里找到这篇文章并尝试了所有建议后,我找到了另一个解决问题的解决方案:
正如Arman Bimatov所发现的那样:
1)转到项目的参考
2)右键单击Microsoft.CSharp - > Properties
3)如果将其复制为False,则将Copy Local更改为True .
我认为它必须以某种方式处理在GAC中注册的程序集以及Visual Studio获得“正确”版本的方式 . 我想在我的开发人员机器上以某种方式在较新的框架之后安装了.NET Framework 3.5(如果可能的话),因此Visual Studio从GAC获取了错误的版本 . 或者简单地说,目前还不清楚VS要获得哪个版本,所以它需要较旧版本......
如果您仍然有相同的错误消息,您还可以尝试为System.Core Dll设置Copy Local to True,并查看它现在可以正常工作 .
问候SkippingAdi
几天来我一直在努力解决这个问题,终于弄明白了 .
我所做的只是从web.config中删除以下内容:
我安装MVCSiteMapProvider包后为我的网站制作面包屑后,我开始收到同样的错误 .
如果您安装了MVCSiteMapProvider并且出现此错误,则需要将
@ViewBag.Title
替换为其他内容,例如,@Html.MvcSiteMap().SiteMapTitle()