繁体   English   中英

C#出现错误:在未引用的程序集中未定义类型“ Indirect.Class”。 必须添加对程序集“间接”的引用

[英]C# Getting Error: Type “Indirect.Class” Not Defined In an Assembly Not Referenced . Must Add a reference to assembly “Indirect”

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

我有2个c#项目AB ,项目B引用了一个第三方库Indirect A将调用B定义的静态方法,并且在构建时出现以下错误。

错误2类型'Indirect.Class'是在未引用的程序集中定义的。 您必须添加对程序集“ 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因为在这种转换下被定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM