“丢失编译器所需的成员”错误被抛出多次,几乎没有改变的代码
今天,在对我运行的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。 一旦我添加了该组件的引用,它编译得很好。
我不知道是否有其他人经历过这种情况,但是在添加了一些利用dynamic
types的代码并将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