编译器构建错误:以下方法或属性之间的调用不明确

Glu*_*uip 13 c# compiler-construction build .net-3.5

我遇到了扩展方法的奇怪的编译器错误.我有一个扩展方法的程序集

public static class MyClass
{
    public static Bar GetBar(this Foo foo)
    {
        return new Bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

在同一个集会的其他地方我做这样的事情

Foo foo = new Foo();
var bar = foo.GetBar();
Run Code Online (Sandbox Code Playgroud)

当我清理和编译一切都没问题.但是,一旦我在程序集中做了一个小的更改(比如一个额外的空白)并再次构建,我得到一个像这样的错误:

错误973以下方法或属性之间的调用不明确:'MyNameSpace.MyClass.GetBar(Foo)'和'MyNameSpace.MyClass.GetBar(Foo)'

只有在我清理项目后,我才能再次构建.这是使用旧版程序集的编译器中的问题吗?我现在看到的只是解决方法是用普通的静态方法替换我的扩展方法.

Car*_*rra 24

我花了一段时间才想出这个,但Gluips评论是正确的,我会在这里添加它以便于参考:

而已!不知何故,该项目直接引用自己.删除引用可能会解决问题.谢谢!

这为我修好了.

  • 不幸的是,ReSharper有时会这样做.:( (6认同)

Jus*_*tin 4

好吧,玩了一会儿后,我可以通过添加对输出文件的文件引用来重现与此类似的情况 - 第一次它构建成功(因为未使用引用 - 你只是得到一个“引用未解析”警告),但是从此时起,我看到代码编辑器中出现“调用不明确”错误。

然而,对我来说,这并不妨碍我构建解决方案(我正在使用 Visual Studio 2010 进行测试),但是错误确实出现 - 也许在稍微不同的情况下,例如不同的 Visual Studio 版本,这会停止项目从编译。

您还可以使用复制输出装配的构建后步骤来设计相同的情况。