C# Getting Error: Type "Indirect.Class" Not Defined In an Assembly Not Referenced . Must Add a reference to assembly "Indirect"

C# Getting Error: Type "Indirect.Class" Not Defined In an Assembly Not Referenced . Must Add a reference to assembly "Indirect"

我知道有人提出了这个问题,但引起我的原因与我在类似问题上看到的不同,所以这是我的设置。

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

Error 2 The type 'Indirect.Class' is defined in an assembly that is not referenced. You must add a reference to assembly 'Indirect, Version=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 中调用不依赖于 Indirect 程序集的 B 方法,我仍然看到错误。有人可以向我解释为什么编译器在编译时无法确定这一点吗?我可以简单地重命名第二个 B.TestMethod 然后错误就会消失,或者我可以向它添加第三个参数,但所有这些似乎都是不必要的。

编译器必须选择最匹配的重载,在此过程中,它会评估每个候选者所需的转换次数,然后对其进行排名。

你我都知道,因为有一个完全匹配,其他人有多糟糕并不重要,因为他们永远赢不了。但这不是语言规则的编写方式,也不是编译器的工作方式。

编译器在对所有重载(包括您未调用的重载)进行排名之前,并不知道您没有调用第二个重载。为此,它检查实际参数(string 类型)是否可以转换为形式参数的类型(Indirect.Class),并且它需要在程序集内部查找 Indirect.Class 因为那是定义这种转换的地方。