2013-03-18 133 views
0

如果我有訂單中的項目列表。Visual Studio參考項目/ Dll的

1. Commons 
2. DAL 
3. BAL 
4. WebUI 

在上述項目中,引用應該以這種方式發生。

DAL refer's to Commons. 
BAL refer's to DAL. 
WebUI refer's to BAL. 

那麼,爲什麼它給當我從WebUI中它返回其在共享定義的對象訪問的的方法BAL錯誤。因爲在項目依賴關係中,WebUI依賴於所有三個項目。但爲了方便起見,我不希望在WebUI項目中包含Common,BAL,DAL的引用。但是我想要它應該自動包含所有依賴項目的引用(如果有的話)。

任何人都可以幫助我解決這個問題,以便如何擺脫Visual Studio的這種意外行爲。

回答

4

如果WebUI使用了在Commons定義的任何類型然後Commons項目必須包括作爲到WebUI項目的引用。即使該類型被用作返回類型,但該方法在WebUI項目正在使用的不同程序集(即BAL)中聲明的方法中。

真的是解決這個..

+0

你不覺得,Visual Studio應該自動處理這些類型的項目參考層次嗎? – 2013-03-18 16:38:31

+0

不是,因爲你可能有一個場景,在這個場景中,WebUI只使用了一些方法,比如BAL,它們不公開或者使用Commons中定義的任何類型。在這種情況下,你不需要參考Commons。那麼Visual Studio如何能夠爲你做出決定? – 2013-03-18 16:40:16

+0

這很簡單,因爲在任何情況下,任何引用項目正在使用的dll都需要被複制。那麼爲什麼不自動引用呢? – 2013-03-18 16:43:44

1

參照一個DLL中的一個項目沒有辦法不包括(副本)DLL的代碼到項目中。如果BAL正在返回在CommonsWebUI中定義的對象,則WebUI也需要對Commons的引用,因此它知道返回的類型。

如果您想要解決這個問題,可以嘗試使用ILMerge將這些程序集合並在一起,然後引用合併的程序集。我建議在軟件發佈期間這樣做。否則,它似乎會使開發和調試更加繁瑣。

+0

如果我在我的解決方案中爲每個模塊製作單獨的dll,我怎麼能在我的解決方案中的每個項目中添加100個項目引用。 – 2013-03-18 16:40:03

+0

請參閱我的編輯方法。 – 2013-03-18 16:41:09

+1

@ManishRawat - 除非你正在建設Office,那麼在你的解決方案中有100多個程序集可能是過度殺傷..只是一個想法。 – 2013-03-18 16:41:19