2013-04-04 155 views
0

我們正在構建基於log4net的簡單日誌記錄庫。該項目有一些常見的模塊捕獲未處理的異常等引用不同版本的log4net

問題是我們想要部署此庫到其他Web解決方案,如umbraco和EPiServer,它們都已經使用log4net,並使用不同的版本。如果我們從日誌庫中部署log4net程序集,那麼umbraco和EPiServer都會抱怨版本不匹配。

解決此問題的最佳方法是什麼?我在這裏閱讀了這個方法http://www.claassen.net/geek/blog/2011/08/using-log4net-without-requiring-it-as-a-dependency.html,但不確定這是否是一種標準化的方法?

在此先感謝 鋁

+0

[loading-multiple-versions-of-the-the-assembly](http://stackoverflow.com/questions/4451220/loading-multiple-versions-of-the-same-assembly) – k3b 2013-04-04 12:30:24

回答

0

有真的只有兩個方法來此。一種是將代碼加載到完全不同的AppDomain中,並且不依賴於umbraco或EPiServer。然後你可以自由地加載你想要的任何版本的log4net,因爲它將是唯一加載的版本。這給你帶來的AppDomain之間的溝通問題確實依賴於umbraco或EPiServer和你的AppDomain。這不是微不足道的。看一下像Microsoft Addin Framework(MAF)這樣的東西會告訴你爲什麼它很複雜,以及如何去做。

另一種選擇是使用類似ilmerge的東西來合併log4net程序集與你的。這樣,只要你的代碼引用了log4net,它就可以有效地引用它的私有版本。還有其他第三方工具,如SmartAssembly,在合併程序集時可靠一些。我不認爲ilmerge一段時間以來一直在努力,並沒有得到真正的支持。

+0

* 「另一種選擇是使用類似ilmerge的東西來合併log4net程序集和你的程序。」* - 或者當然,只需將log4net源代碼放入項目中並編譯它即可...... – MattDavey 2013-04-04 14:50:49

+0

@MattDavey直接使用源代碼有一些許可問題;但是,是的,這是一個等同的選項。 – 2013-04-04 15:21:51

+0

感謝您的回答傢伙。另一種選擇是使用像ServiceStack.Logging https://github.com/ServiceStack/ServiceStack.Logging或Common.Logging http://netcommon.sourceforge.net/index.html,但它似乎與你這兩個仍然必須部署log4net.dll,這將再次引發依賴性問題。我是對的嗎? – higgsy 2013-04-04 18:23:19