我想知道在創建與其他項目相關的庫的發行版時,什麼是啓發式方法,以及是否應該包含它們。合併程序集的最佳做法?
我的問題是這樣的:
我有一個CommonUtilities庫,提供顧名思義一組可以在多個地方使用工具。 CommonUtilities的依賴包括log4net.dll(日誌框架)和Oracle.DataAccess.dll(數據庫驅動程序)。
我有另一個名爲MyProject的項目,我想包含CommonUtilities。MyProject也依賴於Oracle.DataAccess。
如果我使用ILMerge並將CommonUtilities合併到一個單獨的程序集CommonUtilities.dll中,並且從MyProject引用了所有的東西,但是我相信我應該顯式引用MyProject中的Oracle.DataAccess,因爲它是一個依賴項,並且不使用匯編合併到CU。由於有兩個Oracle.DataAccess程序集引用,因此添加對Oracle.DataAccess的引用也會導致模糊的使用語句。
在我的情況下使用ILMerge/Internalize會導致編譯錯誤,因爲來自內部化Oracle.DataAccess程序集的類型將從CommonUtilities返回並且它們被標記爲內部MyProject不會識別返回的類型。
使這項工作的唯一方法就是不要將這個特定的程序集(Oracle.DataAccess)合併到CommonUtilities中,而只是從MyProject中引用它。 這反過來又產生了一個新問題:我應該引用哪個Oracle.DataAccess.dll - 是否與CommonUtils一起分發的依賴項?
還有其他方法可以解決這一切嗎?
我撓我的頭ilmerge - 我沒有看到一個優勢,將所有組件在一個文件中。任何人都在照顧我? – cfeduke 2008-10-30 15:07:46