合并DLL并更改管理命名空间

vdh*_*ant 7 .net c# dll ilmerge

我想创建一个单一的即DLL 合并与第三方DLL.这意味着最终消费者只需要处理1个dll而不是2个.

为了增加,可以说第三方dll是nLog.如何处理合并后的dll的消费者已经将NLog作为项目参考的情况?

理想情况下,我希望能够做的是将项目中的NLog名称空间更改为"XyzNLog",这意味着用户不需要进行任何别名...任何想法我怎么做?

现在我知道我可以为我的NLog项目添加别名,所以我必须将其称为XyzNLog,但我希望将其转移给合并dll的消费者,以便永远不会发生冲突.

更新 - 解决方案

http://blog.mattbrailsford.com/2010/12/10/avoiding-dependency-conflicts-using-ilmerge/

答对了!因此,通过使用ILMerge,可以将第三方库DLL与Providers自己的DLL合并,这意味着我们将只部署一个DLL.但这不是全部,我们实际上可以更进一步,并告诉ILMerge 内化所有依赖项.这样做会将所有第三方类转换为内部,这意味着它们只能在最终的DLL中使用.呜啊!问题解决=)

鉴于此问题,我的dll的消费者也可能有NLog消失...因为我引用的NLog转移到全部内部!这正是我想要的.

有没有人对此有任何反馈或想法?

Mar*_*lec 1

我同意 Hans 的观点,我强烈建议单独注册 DLL 来发布。

否则,您可能会陷入 DLL 地狱,从而赶走您的消费者。

然后,您可以设计一些巧妙的部署方法来检测 DLL 是否已注册等。