扩展方法的兼职错误

时间:2010-11-25 19:19:13

标签: visual-studio extension-methods

我目前正在处理VB .NET(VS 2010和VS 2008)中的一些扩展方法的兼职(和烦人)错误。

我有一些客户端项目使用我为一般用途创建的“框架”项目中的一些扩展方法。

然而,有时候,当尝试启动解决方案时,我得到一个很长的错误列表,说扩展方法“不是”目标对象的成员。

当发生这种情况时,我可以重建解决方案而不会出现任何错误,但如果我再次启动项目,将再次引发相同的错误。

到目前为止,我有2个解决方法

A)继续扩展方法定义,删除标记,编译(有错误),将标记放回去。

B)关闭Visual Studio并重新打开它。

有没有更好的办法解决这个问题?

4 个答案:

答案 0 :(得分:4)

Connect上出现此问题active bug report。需要一个repro,一个具有特定步骤的项目,让他们在内部重现问题。也许你可以提供帮助,这是解决它或推荐解决方法所需要的。

编辑:这个答案的最后一个补充,因为我发布了这个,还有其他问题,注意到IntelliSense解析器的行为与编译器不同。多目标功能存在问题,特别是在VS2010中,由.NET 4的Client Profile选项触发。它是新项目的默认设置。出现问题的是添加需要完整配置文件的程序集引用,通常是因为依赖于System.Web。你会得到一个警告,但很快就会被大量的错误所震撼。修复方法是将项目的Framework Target从客户端更改为完全。

答案 1 :(得分:3)

我最近遇到过同样的问题。我的项目将构建得很好但是如果我尝试使用Rebuilt选项,我会得到关于我们扩展方法的错误,而不是在他们扩展的对象上找到。

我今天通过使用Extension方法在类的顶部包含Import来设法解决这个问题。

所以在文件的顶部我实际上有

导入project_name.extension_module

我不知道为什么这是必需的,但它解决了我的问题。我希望这能帮助其他人浪费尽可能多的时间!

利安

答案 2 :(得分:0)

比你列出的两个更耗时的工作是“重建解决方案”而不是正常的构建解决方案。每当我遇到这个问题时,这一直对我有用。

答案 3 :(得分:0)

我们有类似的东西。扩展类型A的调用扩展名为merhod。类型实际上是实现接口C的类型B的实例。接口C具有与扩展方法同名的方法。

接口C声明方法Foo B类继承自A实现C

静态类    静态方法Foo(本A)     如果A是C       (A为C).Foo

如果A是C,那么在线路上进行调试时,它实际上会多次调用Foo,您可以在汇编级别进行操作并看到它表明它正在进行比较。我们演示调用发生的方式Foo执行sql语句,我们可以看到sql profiler在Foo中执行代码。

将A更改为C以反映并且bug消失。或者使用debugger hidden / step through并屏蔽bug。此外,如果你微步sql profiler显示查询被多次调用(在实际调用Foo之前​​)为每个汇编语句。