我有一個c#解決方案,它由許多項目組成。C#項目參考的問題
我有一個項目,是我的baseassemblies持有其他項目中使用的所有公共信息。所有其他項目都引用了基本程序集。然而
我加入我的baseassemblies一個dll引用的所有其他項目無法看到它。
我怎樣才能讓這個其他的項目可以看到,baseassemblies被引用的DLL?我不想將DLL添加到所有項目,因爲這會破壞我的baseassemblies項目的目的。
我有一個c#解決方案,它由許多項目組成。C#項目參考的問題
我有一個項目,是我的baseassemblies持有其他項目中使用的所有公共信息。所有其他項目都引用了基本程序集。然而
我加入我的baseassemblies一個dll引用的所有其他項目無法看到它。
我怎樣才能讓這個其他的項目可以看到,baseassemblies被引用的DLL?我不想將DLL添加到所有項目,因爲這會破壞我的baseassemblies項目的目的。
正確的做法是爲您的其他組件就是不用其他DLL的參考。正確地做到這一點的方法是不讓基本程序集公開該DLL中的任何類型。將所需的所有功能封裝在基本程序集中,並確保使用基本程序集的人員無需知道底層dll的基本程序集正在使用。否則,每個將引用基本程序集的項目,如果他們需要使用該dll中包含的內容,他們將不得不引用它。
在.NET中沒有傳遞引用。如果程序集需要引用另一個引用,它必須直接這樣做,它不能「繼承」來自另一個引用的引用。
注意,項目只需要引用它直接使用類型的組件。如果A使用B,B使用C,但A不直接使用C,那麼A只需要直接引用B(加載器將處理B引用C)。
總之,你不能這樣做。您需要添加對包含您要使用的代碼的DLL的引用,否則它將無法看到它。
我的建議是建立在你的「BaseAssemblies」項目的一層,你可以從你的應用程序基本上創建了一個分層架構訪問。
例如
應用層 - 使用IDataClass
業務邏輯層 - 定義IDataClass
數據訪問層 - MyRawDataClass(實現IDataClass)
從例如,應用層只需要一個參考到BAL以便能夠與DAL交互。
你可以有必須由你的「其他」 DLL中實現你的BaseAssemblies導出接口。另外,您的BaseAssemblies需要這些類的一些「類工廠」功能。
其他海報是正確的:你不能這樣做。這是恕我直言,Visual Studio的可悲。 「使」處理這種清潔在20年前的餡餅...
+1你打我吧。我同意100% – 2010-02-18 16:18:37
在許多情況下,這對大型代碼庫並不實用。這是一個很好的「理論」答案,但它需要編碼和測試方面的額外努力才能使其發生(經常)不增值。我並不是說它當然是不適合的...... – 2010-12-06 17:05:38