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

我试图在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的引用?

我读了另一个帖子,但我是c#的新手,我不能理解真正的问题是什么。特别是这些所谓的.config文件的内容和位置。

107201 次浏览

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

或者添加微软。CSharp NuGet包。

Install-Package Microsoft.CSharp

确保你的项目的目标是。net框架4.0。Visual Studio 2010也支持. net 3.5框架目标,但. net 3.5不支持dynamic关键字。

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

ViewBag下的红线是我头痛了3个月)。 去掉微软就行了。

. CSharp引用项目,然后再次添加

我也遇到了同样的问题,我把“微软”去掉了。CSharp”引用,然后再次添加。

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

和重建。

如果错过,则会发生此错误。检查你的项目参考资料。

这些对我都没用。

我的类库肯定都引用了System。酷睿和微软。csharp。Web应用程序是4.0,由于支持问题无法升级到4.5。

我遇到了使用剃须刀引擎编译剃刀模板的错误,并且只会间歇性地遇到它,就像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;
}
}

希望这能帮助到其他人。

对我来说,删除并重新添加对微软的引用。CSharp暂时修复了这个问题,直到受影响的文件被编辑。关闭Visual Studio并重新开放项目将使其更加长期,所以如果这种情况发生在Microsoft。CSharp已经被引用了。

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