簡體   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