因爲我使用Castle's DynamicProxy(特別是「無目標接口代理」)來執行自定義處理方法調用的攔截,所以我有一個內部依賴於Castle.Core.dll的.NET庫。由於我的程序集是強命名的,因此我想使用ILMerge將我的所有依賴項合併到一個部署程序集中,將我的依賴項的類型內化,以便不會不必要地將它們公開給我的客戶。這是NuGet情況下,如果,如果我的組件強命名的,我有我的包依賴關係設置爲具體版本的依賴,或裝配名稱解析休息尤爲重要,因爲Castle.Core.dll也強名稱。請注意,將我的項目作爲強名稱程序集發佈是我的用戶所重視的一項功能,因此不能刪除強名稱。是否有可能使用ILMerge內化Castle項目的DynamicProxy類?
顯然,DynamicProxy需要一些類是公共的正常工作。沒問題,我可以排除某些類型被ILMerge內化。但是,當我有一個引用我的庫的用戶時,還會引用Castle.Core.dll。公共類型現在由兩個程序集提供,並且對它們的引用不明確。
如果我不使用ILMerge Castle.Core.dll,航運它旁邊我自己組裝內化,這可能使我的版本,我的用戶的版本之間的版本衝突。如果我使用ILMerge內部化程序集,我不得不排除內部化DynamicProxy需要正常工作的類型。由於模糊的類型,此方法會破壞引用我的程序集和Castle.Core.dll的任何項目。
我是否被迫進入這兩個不理想的行動之一?還是有一些我還沒有想到的解決方案?
你應該檢查出moq存儲庫。他們內部的Castle.Core for dynamicproxy也... https://github.com/Moq/moq4/tree/dev/Tools – cecilphillip 2013-03-03 02:15:29
感謝您的指針,但我會指出項目正在使用舊版本的城堡項目,他們遭受同樣的問題。 – JimEvans 2013-03-03 04:56:20
這是另一個辯論同一問題的項目。也許他們在這裏的討論可能會對你感興趣https://github.com/FakeItEasy/FakeItEasy/issues/16 – cecilphillip 2013-03-03 13:47:21