“丢失编译器所需的成员”错误被抛出多次,几乎没有改变的代码

今天,在对我运行的C#MVC网站进行了部分更改之后,我又回过头来做了一些修改,发现了这个错误:

缺less编译器所需的成员System.Runtime.CompilerServices.ExtensionAttribute..ctor

这个错误有点含糊(除了描述,显然),因为它不给我一个文件,行或列引用,只有项目。 而且,它总共抛出20次错误。 在我部署的时候(当时是完全function的)和现在,我只做了三次代码修改。 我回复了我的修改,但仍然抛出了对我来说毫无意义的错误。

我还没有find关于SO或Google上的这个错误的信息,除了这个家伙解决scheme和一些单声道项目错误(我不使用单声道)引用。 上面提到的解决scheme需要添加一个允许编译器parsing引用的类定义。 我不是特别想这样做,因为我不需要这样做,直到这一点,它只会沾染我的代码。

只是好奇,如果有人跑过这个之前。 提前致谢!

此错误通常意味着您的项目正在针对.NET 2.0进行编译,或者您没有引用System.Core.dll的正确版本

对于近乎重复的问题,请参阅在C#中使用扩展方法时的错误

就我而言,这是因为该项目没有引用Microsoft.CSharp。 一旦我添加了该组件的引用,它编译得很好。

我不知道是否有其他人经历过这种情况,但是在添加了一些利用dynamictypes的代码并将WebAPI合并到VS2013中作为TypeScript应用程序的项目中之后,我突然下了一个错误。 简单地添加一个对Microsoft.CSharp的引用解决了我的问题。

希望这可以帮助别人。

今天我也遇到了这种情况。 就我而言,我在.NET 4.0应用程序中引用了Newton.Json.Net dll v3.5。 我意识到,我甚至没有使用这个库,因此一旦我从我的引用中删除它,它不再给我编译器错误。

问题解决了!!!

实际的错误来自事实,您的2.0程序集导致错误包含此代码:

 namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } } 

上面的代码允许.NET 2.0程序集使用扩展方法(请参阅在.NET 2.0中使用扩展方法? )。 如果你的目标.NET 4.0和引用2.0程序集(包含上面的代码),因为mscorlib.dll(4.0)在同一个命名空间中包含相同的类,它会混淆编译器。

我解决了这个问题

  • 再次编译原始的2.0程序集,而不需要4.0的属性
  • 通过拆除组件(显然)
  • 通过在编译的目标中添加第三个扩展属性(它似乎推翻了引用的定义)

在项目的某个地方编写代码可能会解决您的问题。 这个对我有用

 namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } } 

从.NET 4.0项目引用的NLog.dll 2.0也可能导致此问题。

我没有一个正确的解决scheme,但我会添加我的数据点:

在我的情况下,错误是由引用GoogleSearchAPINet20引起的

这是发生了什么事情:

  • 我closures了构build的解决scheme
  • 我再次打开解决scheme。 它仍然build立
  • 只要我做任何改变,并尝试构build,我得到19“缺less编译器所需的成员…”的错误
  • 我删除了对GoogleSearchAPINet20的引用
  • 我添加了对GoogleSearchAPINet20的引用
  • 我构build解决scheme。 它构build没有错误
  • 只要Visual Studio处于打开状态,我就可以正确地进行代码更改,构build或执行任何其他解决scheme
  • 我closuresVisual Studio
  • 重复第一步

我没有在我的解决scheme中引用System.Core.dll,我的目标框架是.NET 4。

我有点恼火在这一点上…

尝试使用.NET 4.0的asynchronous任务时遇到此错误。 更新目标框架到4.5.2解决了这个问题。

在将一些asynchronous方法添加到一个winforms项目后,我碰到了一组exception。 我需要将我的.NET版本从4升级到4.5