当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用扩展方法时出错

如何解决《在C#中使用扩展方法时出错》经验,为你挑选了5个好方法。

我遇到了一个让我觉得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 { }
}

我使用扩展方法已经有几个月,但我很确定我不必这样做.还有其他人遇到过这个问题吗?



1> 7wp..:

我有完全一样的问题.错误System.Runtime.CompilerServices.ExtensionAttribute..ctor相当神秘,可能意味着许多不同的事情.

然而,对我来说,它归结为我正在使用的事实Newtonsoft.Json.Net.我删除了对该文件的引用Newtonsoft.Json.Net20.dll,并重新添加了它.在此之后我的解决方案再次构建

最奇怪的是,当我尝试使用Subversion Diff找出此过程后的不同之处时,似乎没有任何变化.

所以我真的不知道删除和重新添加此引用的确是什么,但它确实解决了我的构建问题,提问者提到的这个特定错误消息.

更新1:

对于那些再次遇到这种情况的人,正如评论者指出的那样,解决这个问题的正确方法是下载Json.Net的ZIP,并且应该有一个3.5版本,每次使用Json.Net时都重新引用3.5并删除旧的引用,因为它可能引用为旧版本的.net构建的程序集.

更新2:

Charlie Flowers指出,用于3.5的DLL NewtonSoft标签实际上不适用于3.5.您必须使用它们标记为.net 2.0的DLL


如果您在.NET 3.5环境中使用Json.NET,则应该使用.NET 3.5的版本而不是当前版本的2.0版本.3.5版本不包含ExtensionAttribute类.
这应该是公认的答案.Newtonsoft.Json.Net20是罪魁祸首!

2> abelenky..:

我自己也遇到了这个问题.就我而言,这是因为我将VS 2005/.Net 2.0项目转换为VS 2008/.Net 3.5项目.转换工具保留了对System.Core 2.0的引用,我找不到一种简单的方法来更改对System.Core 3.5的引用.

我最终从头开始在VS 2008中重新创建项目,它是在适当引用System.Core 3.5的情况下创建的



3> Michael Buen..:

在VS中,单击项目(在文件,编辑,视图旁边),选择属性

然后在Application选项卡中(你会注意到你已经在3.5中),选择Target Framework到2.0,然后编译(它会出错).然后再把它放回3.5,然后再次编译,错误就会消失

我认为这只是Visual Studio中的一个小故障,只是愚弄IDE :-)



4> Andrew Myhre..:

我在从VS 2008升级到VS 2010 Beta 2的类库项目中遇到了同样的问题.在升级之前,我没有向项目添加任何扩展方法,然后我开始看到相同的错误.

将具有以下代码的类添加到项目中解决了以下问题:

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

在此博客上找到了提示:http://blog.flexforcefive.com/?p = 105



5> Tom Ritter..:

您的框架对于扩展方法来说不够高.
这是一个让扩展方法无法在3.5中工作的黑客攻击

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有