在即时窗口中使用动态(Dynamic)会导致'Microsoft.CSharp.RuntimeBinder.Binder'未定义或未导入的错误。

68
如果我在Visual Studio的立即窗口中使用dynamic,会出现错误。

预定义类型'Microsoft.CSharp.RuntimeBinder.Binder'未定义或导入

我该如何解决这个问题?

我知道你的问题早已被问过,但请检查一下我的答案是否解决了这个问题...帮助其他遇到同样问题的人。 - Matt
4个回答

119

您应该在选定的项目或启动项目中添加对Microsoft.CSharp库的引用。并且您的项目应该引用.NET Framework 4或更高版本。

关于即时窗口上下文的MSDN:

在建立设计时表达式评估的上下文时,Visual Studio会引用解决方案资源管理器中当前选定的项目。如果在解决方案资源管理器中未选择任何项目,则Visual Studio尝试针对启动项目执行函数计算。如果在当前上下文中无法计算函数,则会收到错误消息。


1
我该怎么做呢?我正在使用“立即窗口”。 - Colonel Panic
你在某个项目的环境中使用即时窗口。你应该向这个项目添加引用。 - HoberMellow
这也适用于调试监视窗口。 我有一个启动项目没有引用Microsoft.CSharp,但引用了另一个引用了它的项目的解决方案。 监视窗口会抛出“绑定器未定义或未导入”的异常。 在启动项目中添加对Microsoft.CSharp的引用即可解决问题。 - Snixtor
5
在当前选择的项目中引用它似乎不起作用。我在使用已引用但无法在即时窗口中找到的System.Data时遇到了同样的问题。可能只有在调试会话期间才能正常工作?我正在使用它来调用一个静态方法而不启动调试会话。 - Louis Somers

21

有两个重要的事项,请注意以下内容:

  1. 确保您的项目属性引用了 .NET Framework 4或更高版本(如果不是这种情况,请更改:右键单击项目,选择“属性...”菜单项,然后选择目标框架“.NET Framework 4”(或更高版本))。
  2. 确认您已经将"Microsoft.CSharp"程序集添加为引用(请注意,在执行步骤1之前,需要重新加载项目才能执行该操作)。

之后,您可以使用 dynamic 类型。在立即窗口的范围内使其可用,需要将引用添加到所选项目或启动项目中。


注意:这里 是我发现的一篇关于C#中dynamics的好文章,介绍了它的工作原理以及您可以使用它做什么。


1
被点赞了,卡在单元测试项目上,因为没有引用“Microsoft.CSharp”程序集。 - Lazy Coder

8
  1. 进入项目->添加引用。
  2. 从侧边栏选择程序集和框架
  3. 勾选Microsoft.CSharp

愉快的编码!


4
别忘了点击“确定”。 - Victor Michael Kosgei


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接