2010-06-13 70 views
2

我正在構建一個類庫,並將其默認名稱空間用作「System」。假設我正在創建一個通用數據結構,稱爲PriorityQueue並將其放置在System.Collections.Generic命名空間下。類庫參考問題

現在,當我從另一個項目中引用該庫時,我無法再在「System.Collections.Generic」命名空間下看到PriorityQueue。雖然在該項目中引用了該庫,但我無法訪問它中的任何類。

我的問題是mscorlib和System.dll共享類似的命名空間,但仍然可以訪問這兩個程序集的類,但爲什麼我的不能?如果我在我的類庫中的System.Collections.Generic命名空間下放置一個公共類,並將該庫引用到項目中,並使用類似「using System.Collections.Generic」的語句,那麼爲什麼我無法在那裏訪問我的類?

這是我做過的一個實驗,我知道在自定義類庫中不鼓勵使用System命名空間,但我想知道爲什麼在這種特殊情況下無法訪問我的類的原因?

請有人對此有所瞭解。

PS:上次我問了類似的問題,但是說錯了,所以人們被誤解了,我沒有得到我的答案。這一次,我試圖儘可能正確地把它放在正確的位置。很抱歉對於這個誤會。

+0

如果您嘗試將類放在自定義命名空間下,它能正常工作嗎? – brickner 2010-06-13 16:42:49

+0

yes of course。正如我所說我正在做這個想法的一些實驗。 – 2010-06-13 16:43:54

+0

項目輸出DLL的名稱是什麼? – Toby 2010-06-13 16:54:24

回答

1

當您使用「項目引用」而非「程序集引用」時,會出現此問題。

使用「組件參考」。

這是一個糟糕的主意,我不願意深入研究其根本原因。

更新

我猜測,當您使用項目引用(從您的系統命名空間中的項目),產生的問題是作爲構建不知道它應該解決您引用的項目的依賴性,但而是嘗試從程序集中已經引用的System.dll中的一箇中解析該程序。它顯然不存在於System.dll中。如果你添加一個直接引用到你的dll的內置版本,這個版本將能夠解決它。

+1

當我評論你的其他問題時,請反思一下如果每個人都試圖去做你正在做的事 - 混沌會發生什麼。微軟可以使用這種技術,因爲他們正在用他們自己的**命名空間來做這件事。 「系統」命名空間不是你的。請使用你自己的命名空間。 – 2010-06-13 17:20:07

0

我剛剛測試了一些代碼,並且我可以在我自己的項目中擴展System命名空間,然後在同一個解決方案中調用來自其他項目的新類。我不知道你爲什麼不能做到這一點。