C#Getting Error:输入" Indirect.Class"在未引用的程序集中未定义。必须添加对程序集的引用"间接"

时间:2016-03-16 21:02:16

标签: c# .net compiler-errors .net-assembly

我意识到这个问题已经提出来了,但我的问题原因不同于我在类似问题上看到的情况,所以这是我的设置。

我有2个c#项目,AB,项目B引用了第三方库IndirectA将调用B中定义的静态方法,当我构建时,我会收到以下错误。

  

错误2类型' Indirect.Class'在未引用的程序集中定义。您必须添加对程序集的引用,间接,版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null'。

以下是代码:

//Project A
class A
{
    static void Main(string[] args)
    {
        B.TestMethod("fileName", "param2");
    }
}

//Project B
public class B
{
    public static string TestMethod(string fileName, string param2)
    {
        return "";
    }

    public static bool TestMethod(Indirect.Class doc, string anotherParam)
    {
        return false;
    }
}

所以即使在A我调用的B方法不依赖于Indirect程序集,我仍然会看到错误。有人可以向我解释为什么编译器在编译时难以确定吗?我可以简单地重命名第二个B.TestMethod并且错误会消失,或者我可以添加第三个参数,但所有这些似乎都是不必要的。

1 个答案:

答案 0 :(得分:1)

编译器必须选择最匹配的重载,并且在这样做时,它会评估每个候选者所需的转换次数,然后对它们进行排名。

你和我都知道,因为有一个完全匹配,其他人并不重要,因为他们无法获胜。但这不是语言规则的编写方式,也不是编译器的工作原理。

编译器不知道你没有调用第二个重载,直到它对所有重载进行排名,包括你不调用的重载。为此,它会检查实际参数(类型string)是否可以转换为形式参数(Indirect.Class)的类型,并且需要查看{{1}的程序集内部因为那样会定义这样的转换。