C# 为什么我会得到';找不到编译动态表达式所需的一个或多个类型;?
我有一个更新过的项目C# 为什么我会得到';找不到编译动态表达式所需的一个或多个类型;?,c#,asp.net-mvc,c#-4.0,C#,Asp.net Mvc,C# 4.0,我有一个更新过的项目 .NET 3.5 MVC v2至 .NET 4.0 MVC v3 编译尝试使用或设置@ViewBag.Title属性时出错 找不到编译动态表达式所需的一个或多个类型。 是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用 我已经做了以下工作 跟随 将项目/属性/应用程序选项卡中的目标框架设置为.NET FramWork 4 添加了System.Core框架 添加了Microsoft.CSharp框架 添加了System.Xml框架 添
- .NET 3.5 MVC v2至
- .NET 4.0 MVC v3
@ViewBag.Title
属性时出错
找不到编译动态表达式所需的一个或多个类型。
是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用
我已经做了以下工作
...
<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>
....
。。。
....
....
看起来您正在web.config中导入System.Core 3.5。您需要从4.0框架导入System.Core,因为ViewBag需要System.Dynamic命名空间
在我的机器上,它看起来像System.Core v4.0.30319好的,我通过以下步骤使它工作
更改为
更改为
ViewEngines.Engines.Add(新的RazorViewEngine())编码>到应用程序启动()
方法
我想就是这样。我用以下方法解决了这个问题: 首先,我注意到使用gacutil(全局程序集缓存实用程序)时,它包含对System.Core的两个引用,一个是对版本4.0的引用,另一个是对版本3.5的引用。显然,在razor视图中,即使在项目中我正确地引用了版本4.0,它仍然使用版本3.5,这就是为什么我得到关于动态类型的错误。 要检查这是否是您的案例,请以管理员身份打开Visual Studio命令提示符并执行:
gacutil -l System.Core
要删除对System.Core旧版本的引用,我执行了以下步骤:
- cd %systemroot%\assembly\
在这里,您可能有多个“gac”目录,因此您必须在每个目录中进行搜索才能找到您的组件。对我来说,它在“gacmsil”目录中
- 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
-cd gacmsil
-cd系统核心
-光盘__
-删除**说“y”以确定。
-cd。。
-研发部__
-cd。。
-研发系统核心
现在我在VisualStudion中再次打开了我的解决方案,错误消失了,它正确地引用了System.Core4.0,我不再得到动态错误:)
我希望它也能帮助你,
Best,N.值得一提的是,当这件事发生在我身上时(在一个从MVC2自动转换为MVC3的项目中),我所要做的就是向Microsoft.CSharp添加一个项目引用。在我的例子中,web.config已经有了这里提到的4.0引用,我想这是升级脚本的功劳。对我来说,解决方案是添加:
ViewEngines.Engines.Add(new RazorViewEngine());
对于
global.asax.cs
中的Application\u Start()
方法,必须在项目中添加Microsoft.CSharp.dll版本-v4.0.30319的参考。在安装VS 2010后,可在C:\Program Files\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll上获得该文件。我在使用Microsoft.Office.Interop.Excel时收到windows应用程序的此错误;。。。。。。运行时版本在一个或多个DLL之间似乎不兼容
我的解决方案:
我将整个解决方案从.NET 4.0转换为.NET 3.5
该死的,我转换回4.0,然后又开始收到错误
基于此,针对您的错误,尝试将您的解决方案转换为可以工作的旧.NET框架
=============编辑=================
2小时后,我完成了我的ExcelInterop课程中的一些关键内容,它非常有效……出于某种原因,仅在.NET 3.5而不是4.0上,我的解决方案在某种程度上是有效的以上所有内容都不适用于我。通过更多的搜索和查看Web.Config设置,我发现这个答案对我很有用
我也经历过类似的事情,不过就我而言,我已经升级了很多东西,包括从Visual Studio 2010到Visual Studio 2012。我遵循了上面所有的建议,但仍然很痛苦。最后,我决定重新创建整个项目。只有当我尝试将成员资格提供程序方面重新添加到web.config文件时,我才突然意识到版本冲突的地方
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<clear/>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/AppName"/>
</providers>
</sessionState>
虽然现在来看,这是显而易见的。提供的类型具有特定版本。我简单地删除了这个版本,找到了合适的类型。因此,就我而言,决议是用以下内容取代上述内容:
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<clear/>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers" connectionStringName="DefaultConnection" applicationName="/AppName"/>
</providers>
</sessionState>
然后重新编译。我花了好几天才找到这个,因为我找错了地方 Visual Studio 2010中的默认项目应具有对Microsoft.CSharp和System.Core的引用 如果项目中没有引用它们,您需要添加它们,错误就会消失。Woow 我几乎晚了一年,但仍然认为我应该根据我的发现(太平洋标准时间2013年7月13日晚上7:15)回答这个错误消息。这可能对正在寻找的人有帮助
"One or more types required to compile a dynamic expression cannot be found."
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<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>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>