[英]Indirect reference to solution project causes “Type is defined in an assembly that is not referenced”
[英]C# Getting Error: Type “Indirect.Class” Not Defined In an Assembly Not Referenced . Must Add a reference to assembly “Indirect”
我意識到這個問題已經提出,但是由於與我在類似問題上看到的原因不同,導致了我的原因,所以這是我的設置。
我有2個c#項目A
和B
,項目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.