我遇到了一个让我觉得3.0框架中存在错误的问题.当我尝试使用扩展方法时,我收到以下错误:
Missing compiler required member 'System.Runtime.CompilerServices.ExtensionAttribute..ctor'
使用这个简单的代码时:
public static class StringUtils { static void TestExtension(this String targetString) { } }
使编译错误消失的唯一方法是添加以下代码:
namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } }
我使用扩展方法已经有几个月,但我很确定我不必这样做.还有其他人遇到过这个问题吗?
我有完全一样的问题.错误System.Runtime.CompilerServices.ExtensionAttribute..ctor
相当神秘,可能意味着许多不同的事情.
然而,对我来说,它归结为我正在使用的事实Newtonsoft.Json.Net
.我删除了对该文件的引用Newtonsoft.Json.Net20.dll
,并重新添加了它.在此之后我的解决方案再次构建
最奇怪的是,当我尝试使用Subversion Diff找出此过程后的不同之处时,似乎没有任何变化.
所以我真的不知道删除和重新添加此引用的确是什么,但它确实解决了我的构建问题,提问者提到的这个特定错误消息.
对于那些再次遇到这种情况的人,正如评论者指出的那样,解决这个问题的正确方法是下载Json.Net的ZIP,并且应该有一个3.5版本,每次使用Json.Net时都重新引用3.5并删除旧的引用,因为它可能引用为旧版本的.net构建的程序集.
Charlie Flowers指出,用于3.5的DLL NewtonSoft标签实际上不适用于3.5.您必须使用它们标记为.net 2.0的DLL
我自己也遇到了这个问题.就我而言,这是因为我将VS 2005/.Net 2.0项目转换为VS 2008/.Net 3.5项目.转换工具保留了对System.Core 2.0的引用,我找不到一种简单的方法来更改对System.Core 3.5的引用.
我最终从头开始在VS 2008中重新创建项目,它是在适当引用System.Core 3.5的情况下创建的
在VS中,单击项目(在文件,编辑,视图旁边),选择属性
然后在Application选项卡中(你会注意到你已经在3.5中),选择Target Framework到2.0,然后编译(它会出错).然后再把它放回3.5,然后再次编译,错误就会消失
我认为这只是Visual Studio中的一个小故障,只是愚弄IDE :-)
我在从VS 2008升级到VS 2010 Beta 2的类库项目中遇到了同样的问题.在升级之前,我没有向项目添加任何扩展方法,然后我开始看到相同的错误.
将具有以下代码的类添加到项目中解决了以下问题:
namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } }
在此博客上找到了提示:http://blog.flexforcefive.com/?p = 105
您的框架对于扩展方法来说不够高.
这是一个让扩展方法无法在3.5中工作的黑客攻击