对抗当前的RC2 - 生成的模板Razor视图包括:
@{
ViewBag.Title = "Details1";
Layout = "/Views/Shared/_Public.cshtml";
}
在ViewBag.Title下有一个红色波浪形,这个编译错误:'
Error 4 One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll? c:\Visual Studio 2010\Projects\myProj\Views\Webinar\Details1.cshtml 6 2 TTSTrain.Webinars.WebEntry
但是项目正确构建和运行。错误是否表明应该解决的其他问题?
答案 0 :(得分:16)
我从Web.config文件中的targetFramework
元素中删除了<compilation>
属性后出现了同样的问题。
我将其恢复到
<compilation debug="true" targetFramework="4.0">
一切都恢复正常!
答案 1 :(得分:9)
我通过以下方式解决了这个问题:
首先我注意到使用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 <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
之后我在visual studio中再次打开我的解决方案并且错误消失了,它正确地引用了System.Core 4.0并且我没有得到动态错误:)
我希望它对你有所帮助, 最好的,N。
答案 2 :(得分:4)
与@ Kaiser的答案类似,由于GAC中有多个System.Core
程序集,我遇到了这个问题。
然而,我选择不删除3.5程序集。相反,在Views web.config中,我修改了configuration/system.web/compilation
节点,如下所示:
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.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=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblies>
</compilation>
重要的一行是最后一个assembly
节点:它告诉Razor编译器使用哪个GAC程序集版本。
一旦我这样做,我的剃刀观点一切都很好。
答案 3 :(得分:2)
以管理员身份运行VS 2012时,我没有遇到此问题。
否则,对我有用的是什么:
在root web config中添加了推荐的引用,以正确的程序集作为编译节点的子句
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
为System.Core和Microsoft.CSharp`
设置copy local = true属性
答案 4 :(得分:1)
您是否引用了Microsoft.CSharp
和System.Core
?
MVC Views(通常)在您访问站点时动态编译,而不是在VS中编译应用程序时编译。我想你在运行网站时会看到问题。只需添加两个引用就可以了。
答案 5 :(得分:1)
通过使用Peters答案我设法用Html.EditorFor(m =&gt; m.xxx)解决问题,在chtml文件中加下划线错误。 尽管ViewBar错误仍然存在。 所以我改变了像这样的web.config
<compilation debug="true" targetFramework="4.5.1">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
注意Microsoft.Csharp行。 上面做了诀窍,现在chtml编辑器从红色下划线清楚。 谢谢彼得
答案 6 :(得分:0)
我遇到了完全相同的问题。默认情况下,当您创建MVC3应用程序时,它会在解决方案中粘贴web.debug.config和web.release.config。当我摆脱这两个项目时,ViewBag问题解决了。这可能与彼得在上面所说的有关,但我没有测试过。
答案 7 :(得分:-1)
这是读取ViewBag中其他字段的时间。所以,如果你从控制器传递它们。 ViewBag.yourobjectDto = yourObjectDto;
确保此行不会因条件或其他因素而被阻止。
答案 8 :(得分:-2)
尝试
Page.Title =“Details1”;
它可能会奏效。