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

时间:2012-07-30 16:22:49

标签: c# .net

我正在尝试在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文件的位置和位置。

8 个答案:

答案 0 :(得分:579)

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

答案 1 :(得分:21)

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

您可以在项目属性中调整框架版本。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb398202.aspx

答案 2 :(得分:7)

我有同样的问题,除了删除和添加引用后没有修复错误,所以我将.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" />

并重建。

答案 3 :(得分:6)

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

答案 4 :(得分:1)

我遇到了同样的问题并通过删除&#34; Microsoft.CSharp&#34;解决了这个问题。该项目的参考,然后再次添加。

答案 5 :(得分:1)

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

也许重新启动IDE作为第一步看起来微不足道,但这里提醒我这样的人并不是第一件事。

答案 6 :(得分:0)

这些都不适合我。

我的类库肯定都引用了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;
            }
        }

希望这可以帮助其他人。

答案 7 :(得分:-3)

如果您错过了,可能会发生Microsoft.CSharp.dll此错误。检查项目参考。