【问题标题】:Part-time bug with extension-methods扩展方法的兼职错误
【发布时间】:2010-11-25 19:19:12
【问题描述】:

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

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

但是,有时,当尝试启动解决方案时,我会收到一长串错误,指出扩展方法“不是”目标对象的成员。

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

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

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

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

有没有更好的办法来处理这个问题?

【问题讨论】:

    标签: visual-studio extension-methods


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我最近遇到了同样的问题。我的项目可以很好地构建,但如果我尝试使用 Rebuilt 选项,我会收到关于在它们扩展的对象上找不到我的扩展方法的错误。

      我今天已经设法解决了这个问题,方法是使用 Extension 方法在类的顶部添加一个 Import。

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

      导入 project_name.extension_module

      我不知道为什么需要这样做,但它解决了我的问题。我希望这可以帮助其他像我一样浪费时间的人!

      利亚姆

      【讨论】:

        【解决方案3】:

        比您列出的两个更省时的解决方法是“重建解决方案”而不是正常的构建解决方案。每当我遇到这个问题时,这总是对我有用。

        【讨论】:

          【解决方案4】:

          我们有一些非常相似的东西。调用扩展类型A的扩展方法。类型实际上是实现接口C的类型B的实例。接口C有一个与扩展方法同名的方法。

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

          静态类 静态方法 Foo (this A) 如果 A 是 C (A as C).Foo

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

          将 A 更改为 C 以反射和错误消失。或者使用隐藏/单步调试器并掩盖错误。此外,如果您对每个汇编语句执行微步操作,sql 分析器会显示查询被多次调用(在实际调用 Foo 之前)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-08
            • 1970-01-01
            • 2012-04-09
            • 1970-01-01
            • 2017-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多