扩展方法未被识别
在导入的程序集中存在扩展方法时需要什么? 我在类库项目中构build了一个项目,但在我的Web项目中没有识别出引用该库的项目。 库中的所有其他类和方法都是可见的,但是这种扩展方法不是。 扩展方法在库中使用时可见。
使用扩展方法引用包含类的程序集是不够的。 您需要在每个要使用扩展方法的源文件中导入包含该类的名称空间。
例如,要使用LINQ到对象,需要引用System.Core程序集并导入System.Linq命名空间 (其中包含Enumerable类和LINQ扩展方法):
using System.Linq;
你确定扩展方法是公开的吗?
如果在不使用扩展语法时可以调用扩展方法,请使用Format:this.MyExtensionMethod()这样可以解决在VS2010中找不到类的扩展方法的问题。
对于任何在VB.NET中遇到同样问题的人来说,注意不仅扩展方法,而且模块本身需要标记为Public
,否则你会得到这个错误。 至less在VS2015社区中情况就是如此,在其他版本中也可能会出现这种情况。
有关帮助我的示例实现:
(请注意已经提到的this
关键字)。
/// <summary> /// Convert current bytes to string /// </summary> /// <param name="bytes">Current byte[]</param> /// <returns>String version of current bytes</returns> public static string StringValue(this byte[] currentBytes) { return string.Concat(Array.ConvertAll(bytes, b => b.ToString("X2"))); }
对于任何人想知道,我有这个相同的问题没有任何答案的工作。 原来是因为这个程序集的using
声明是别名:
using ex = MyApp.Example
删除别名工作,但我决定,而不是添加一个重复的,无别名using
,这也解决了问题:
using MyApp.Example using ex = MyApp.Example
我有这个问题使用扩展方法在枚举中引用彼此的解决scheme,如下所示。 Intellisense在ApplicationUI项目中为扩展方法工作,甚至运行时没有编译或运行时错误。 但是这个方法根本行不通。 此外,立即窗口向我保证,BusinessObjectLib.MyEnum不包含我的扩展方法的名称的方法,并且不能find扩展方法。
GenericLib - project where extension method on generic enums is defined BusinessObjectLib - project where enums were defined, references GenericLib ApplicationUI - project referencing both GenericLib and BusinessObjectLib
即使解决scheme资源pipe理器看起来好像查看ApplicationUI中的所有项目,当我打开BusinessObjectLib项目时,我可以看到它对GenericLib的引用由于某种原因而中断。 (就像我们所有的代码一样,VS可能也有错误?)。 首先,我在VS中直接打开的BusinessObjectLib项目中工作,删除ref,然后删除项目,然后以相反的顺序恢复。 然后我重命名了ApplicationUI.sou文件并强制它重build。 我能够通过这些操作来解决这个问题,但只有.sou文件重命名似乎是诀窍。 即时窗口仍然继续给我同样的错误,但至less运行时代码再次工作。 我在其他几个项目中使用这种确切的模式,而没有我在这里遇到的问题。
在我的情况下,扩展方法是在一个引用不同版本的组件的外部引用。 我同时在两个项目上的版本,它的工作。
确保如果使用模板,模板声明与方法签名中声明的内容匹配,使用“this”..
所以,
SomeClass<string, string> test = new SomeClass<string, string>(); extensionMethod<key, val>(this SomeClass<key, Lazy<val>>, string val) { }
这个扩展方法不会因为懒惰的包装而显示出来。