找不到编译动态表达式所需的一种或多种类型。您是不是缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?

Posted

技术标签:

【中文标题】找不到编译动态表达式所需的一种或多种类型。您是不是缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?【英文标题】: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?找不到编译动态表达式所需的一种或多种类型。您是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? 【发布时间】:2012-07-28 08:35:29 【问题描述】:

我正在尝试在 Microsoft Visual C# 2010 中编译此代码

using System;
using System.Globalization;


class main

    static void Main()
    

        dynamic d;
        d = "dyna";
        Console.WriteLine(d);    
    

但我遇到了这两个错误

错误 1 ​​未定义或导入预定义类型“Microsoft.CSharp.RuntimeBinder.Binder”

错误 2 无法找到编译动态表达式所需的一种或多种类型。您是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?

我读过其他post,但我是 C# 新手,我无法理解真正的问题所在。尤其是这些所谓的.config 文件是什么以及在哪里......

【问题讨论】:

检查您的参考文献。右键单击并“添加引用..”搜索“Microsoft.CSharp.dll”并添加它。通常 System.Core.dll 在您创建新项目时是标准的,对 CSharp.dll 不太确定 【参考方案1】:

在您的解决方案资源管理器窗口中,右键单击引用,选择添加引用,转到 .NET 选项卡,找到并添加 Microsoft.CSharp。

或者添加Microsoft.CSharp NuGet 包。

Install-Package Microsoft.CSharp

【讨论】:

我的已经被引用了,但我仍然有这个错误。我在 VS 2010 中创建了一个新的 ASP.Net MVC4 应用程序。难住了,我删除并读取了它,错误就消失了。清洁/重建没有帮助。 @Paul:将项目从 4.0 升级到 4.5 后,我也遇到了同样的情况。 Version#/etc 在 4.0/4.5 IIRC 之间是相同的,这可能是原因。 Visual Studio 团队应该真正考虑让人们将鼠标悬停在错误上,然后选择“将 Microsoft.CSharp 添加到引用”【参考方案2】:

确保您的项目以 .NET Framework 4.0 为目标。 Visual Studio 2010 也支持 .NET 3.5 框架目标,但 .NET 3.5 不支持 dynamic 关键字。

您可以在项目属性中调整框架版本。请参阅http://msdn.microsoft.com/en-us/library/bb398202.aspx 了解更多信息。

【讨论】:

【参考方案3】:

我遇到了同样的问题,除了删除和添加引用没有修复错误,所以我将 .Net 版本从 4.5 更改为 4.5.1

要实现这一点,请转到您的 web.config 文件并更改以下行

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

到这里

<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />

然后重建。

【讨论】:

【参考方案4】:

ViewBag 下的红线让我头疼了 3 个月)。 只需从项目中删除 Microsoft.CSharp 引用,然后重新添加即可。

【讨论】:

这对我不起作用,即使我的 ViewBag 行中也有红线【参考方案5】:

我遇到了同样的问题,并通过从项目中删除“Microsoft.CSharp”引用然后再次添加它来解决它。

【讨论】:

【参考方案6】:

对我来说,删除并重新添加对 Microsoft.CSharp 的引用暂时解决了问题,直到编辑了受影响的文件。关闭 Visual Studio 并重新打开项目可以更长期地修复它,因此如果在已引用 Microsoft.CSharp 时发生这种情况,这是一个选项。

也许第一步重新启动 IDE 似乎微不足道,但这里提醒像我这样不认为这是第一件事的人。

【讨论】:

【参考方案7】:

这些都不适合我。

我的类库肯定都引用了 System.Core 和 Microsoft.CSharp。 Web 应用程序是 4.0,由于支持问题无法升级到 4.5。

我在使用Razor Engine 编译剃须刀模板时遇到了错误,并且只是间歇性地遇到它,例如在重新启动 Web 应用程序之后。

对我有用的解决方案是手动加载程序集,然后重新尝试相同的操作...

        bool retry = true;
        while (retry)
        
            try
            
                string textTemplate = File.ReadAllText(templatePath);
                Razor.CompileWithAnonymous(textTemplate, templateFileName);
                retry = false;
            
            catch (TemplateCompilationException ex)
            
                LogTemplateException(templatePath, ex);
                retry = false;

                if (ex.Errors.Any(e  => e.ErrorNumber == "CS1969"))
                
                    try
                    
                        _logger.InfoFormat("Attempting to manually load the Microsoft.CSharp.RuntimeBinder.Binder");
                        Assembly csharp = Assembly.Load("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                        Type type = csharp.GetType("Microsoft.CSharp.RuntimeBinder.Binder");
                        retry = true;
                    
                    catch(Exception exLoad)
                    
                        _logger.Error("Failed to manually load runtime binder", exLoad);
                    
                

                if (!retry)
                    throw;
            
        

希望这可能对其他人有所帮助。

【讨论】:

【参考方案8】:

如果错过,Microsoft.CSharp.dll 可能会出现此错误。检查您的项目引用。

【讨论】:

欢迎来到 Stack Overflow!您可能希望包含代码示例或更多说明。这似乎更像是一条评论, 你基本上和 3 年前给出的接受的答案一样。

以上是关于找不到编译动态表达式所需的一种或多种类型。您是不是缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?的主要内容,如果未能解决你的问题,请参考以下文章

G++ 编译器找不到 iostream 所需的标头

数据库模型所需的建议 - 附有部分 EER

VueJS 编译失败:找不到依赖项

VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK

为啥打开程序是总是显示“找不到所需的.DLL文件”

在目标平台上找不到应用程序所需的本机扩展“文件”的实现