当前位置:  开发笔记 > 编程语言 > 正文

为什么我得到'无法找到编译动态表达式所需的一种或多种类型.'?

如何解决《为什么我得到'无法找到编译动态表达式所需的一种或多种类型.'?》经验,为你挑选了8个好方法。

我有一个项目,我已经更新

.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引用,我假设升级脚本.



1> centralscru..:

对于它的价值,当我遇到这种情况时(在从MVC2自动转换为MVC3的项目中),我所要做的就是添加一个项目引用到Microsoft.CSharp.在我的情况下,web.config已经有了这里提到的4.0引用,我假设升级脚本.



2> Lango..:

好的,我让它使用以下步骤.

    在配置文件中我改变,以在system.web节

    在配置文件中我改变,以在编译器部分

    在Global.asax.cs中,我添加ViewEngines.Engines.Add(new RazorViewEngine());了该Application_Start()方法

我认为就是这样.


谢谢,我遇到了同样的问题.将targetFramework ="4.0"添加到编译指令非常有效!
实际上,即使离开框架4.5,我只是通过添加ViewEngine解决了这个问题(第3点).谢谢!

3> 小智..:

您必须将Microsoft.CSharp.dll版本的参考 - v4.0.30319添加到项目中.在执行VS 2010之后,可以在C:\ Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll中找到它



4> 小智..:

对我来说,解决方案是添加:

ViewEngines.Engines.Add(new RazorViewEngine());

到了Application_Start()方法global.asax.cs.


这也为我解决了这个问题.为什么???在我加入之前,我很了解Razor.

5> Chris Shain..:

看起来您正在web.config中导入System.Core 3.5.您需要从4.0框架导入System.Core,因为ViewBag需要System.Dynamic命名空间.

在我的机器上,它看起来像System.Core v4.0.30319


我建议创建一个新的ASP.NET MVC 3 Web项目,并比较web.config中的所有相关导入和设置,项目引用(包括系统dll),然后在重建之前进行清理.此外,如果您在IIS上收到错误(而不是本地开发Web服务器),您可能需要从中运行aspnet_regiis.exe.Net framework 4文件夹.

6> kefer9..:

我用以下方式解决了它:

首先我注意到使用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.



7> Arman Bimato..:

这是我的决议:

1)转到项目的参考

2)右键单击Microsoft.CSharp - > Properties

3)如果将其复制为True,则将Copy Local更改为False.



8> James Wilkin..:

如果在MVC视图中看到该消息,则需要在Views\web.config中添加引用,如下所示:


    
    
      
        
        (... other references ...)
          <-- Add this
        (...)
      
    
  

不要忘记进行构建,否则更改不会生效.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有