我想創建一個單 dll即合併與第三方DLL。這意味着最終消費者只需要處理1個dll而不是2個。合併DLL和更改管理命名空間
對於擴充的緣故,可以說第三方dll是nLog。如何處理合並後的dll的用戶已在其項目中引用NLog作爲參考的情況?
理想情況下,我希望能夠做的是將我的項目中的NLog命名空間更改爲「XyzNLog」,這意味着用戶不需要做任何別名...任何想法我可能會這樣做?
現在我知道我可以添加別名到我的項目NLOG讓我不得不把它稱爲XyzNLog,但我想同樣要結轉到消費者合併後的dll文件,使從未有衝突。
更新 - 解決方案
http://blog.mattbrailsford.com/2010/12/10/avoiding-dependency-conflicts-using-ilmerge/
賓果!所以通過使用ILMerge,它變爲 可能合併第三方 庫DLL與提供者 自己的DLL,這意味着我們將只有一個 DLL部署。 但是,這還不是全部,我們 實際上可以走一步,並 告訴ILMerge以內在所有 依賴。這是什麼 將所有第三方類別 轉換爲內部聲明,意思是 ,它們只能從 最終DLL中使用。嗚呼!問題解決了=)
鑑於這一問題在我的DLL的消費者也可以有NLOG消失了......我的引用NLOG轉移到爲所有內部!這正是我想要的。
有沒有人對此有任何反饋或想法?
是的,這有DLL地獄寫在它的全部。最糟糕的一種,自我誘導的那種。這是沒有辦法的。 – 2011-05-02 02:06:55
@Hans Passant:所以如果我的組件使用nLog版本x,我必須*強制*我的客戶使用nLog *的版本x作爲他們的東西*太沒有別的了?必須有解決方案,對吧? – 2011-05-02 06:05:23
@zespri這是一個類似的情況,我在,但我不想使用GAC,我不希望我的DLL的用戶不必擔心這個實現細節......所以這就是爲什麼我期待尋求解決方案,並感受到必須有的東西。 – 2011-05-02 10:47:42