基类扩展的Visual Studio 2010编译器错误

我有一个ac#类提供了一些简单的类和一些基类扩展,比如这个…

public static Boolean ToBooleanOrDefault(this String s, Boolean Default) { return ToBooleanOrDefault((Object)s, Default); } public static Boolean ToBooleanOrDefault(this Object o, Boolean Default) { Boolean ReturnVal = Default; try { if (o != null) { switch (o.ToString().ToLower()) { case "yes": case "true": case "ok": case "y": ReturnVal = true; break; case "no": case "false": case "n": ReturnVal = false; break; default: ReturnVal = Boolean.Parse(o.ToString()); break; } } } catch { } return ReturnVal; } 

该类编译良好,似乎没有问题。 然后,我在Web项目中引用了该项目,VS2010 intellisense识别基类扩展,并且F12 /得到定义跳转到原始源代码,如预期的那样。 但是,当我编译Web项目时,我对基类扩展的每次使用都会出错…

 Error 28 'string' does not contain a definition for 'ToBooleanOrDefault' 

这看起来像编译器没有使用引用,所以它忽略了我的所有基类扩展。 想法? 该解决方案是从VS2008迁移出来的,所有这些都运行良好。

除了常见错误(忘记包含扩展类的命名空间)之外,您还应该确保两个项目都使用相同的.NET版本。 有时,v4项目不会正确引用为早期版本的框架构建的程序集

一直得到我

迁移后,会生成一份报告,可能会出现需要手动修复的警告。 您可能尝试删除引用并等待IntelliSense识别它(每次使用引用类时的红线)。 然后再次添加引用,看它是否现在编译。

请注意,这不是关于基类,而是关于未找到的扩展方法。 您可能还想检查项目的.NET版本(.NET 3.5或更高版本的支持扩展方法)并检查引发错误的行:确保using语句可用。

好吧,我想我已经设法解决了这个问题……受到提及框架版本检查的建议答案的启发,我将Web项目及其依赖项恢复为3.5。 编译现在进展的基类似乎没问题,但是内部出现了与缺少Linq的使用语句相关的一些qwerks和不正确的命名空间。 修复了那些3.5编译正常。 源代码检查时间! 然后我将网络切换回4.0并全部编译。 它现在还允许我将依赖关系恢复到4.0,一切都很好。