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

时间:2011-07-13 09:23:43

标签: c# .net-3.5 compiler-construction build

我遇到了扩展方法的奇怪编译错误。我有一个具有类似

的扩展方法的程序集
public static class MyClass
{
    public static Bar GetBar(this Foo foo)
    {
        return new Bar();
    }
}

在同一个集会的其他地方,我做了类似的事情

Foo foo = new Foo();
var bar = foo.GetBar();

当我清理并编译一切都没问题。但是,一旦我在程序集中进行了一些小的更改(比如一个额外的空格)并再次构建,我会收到如下错误:

  

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

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

4 个答案:

答案 0 :(得分:24)

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

  

就是这样!不知何故,该项目直接引用自己。   删除引用可能会解决问题。谢谢!

这为我解决了。

答案 1 :(得分:4)

好的玩了一下我可以通过在输出文件中添加一个文件引用来重现类似的情况 - 第一次成功构建它(因为没有使用引用 - 你只需要一个“引用”没有解决“警告”,但从这一点开始,我看到代码编辑器中出现“调用不明确”的错误。

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

您也可以使用复制输出程序集的构建后步骤来设计相同的情况。

答案 2 :(得分:0)

我无法解释这种行为,但你应该直接在Foo类中实现这样的静态方法。

答案 3 :(得分:0)

我在使用 MSBuild v14 进行编译时出现过这种行为:

  • 在 VS 2015 中构建运行良好
  • 通过 MSBuild 在同一台机器上构建也有效
  • 在仅预装 MSBuild 的服务器计算机上构建失败

安装 .NET Developer Pack(在我的情况下为 Developer Pack for 4.5.2)解决了这个问题,即使错误消息具有误导性。