我想创建一个与第三方dll合并的单个dll,这意味着最终用户只需要处理1个dll而不是2个。
为了增加可读性,让我们假设第三方dll是nLog。如果合并后的dll的使用者已经在他们的项目中引用了NLog,那么该怎么办?
理想情况下,我想能够在我的项目中更改NLog名称空间为“XyzNLog”,这意味着用户不需要进行任何别名设置... 你有任何想法如何做到这一点吗?
现在我知道我可以为NLog添加别名,以便我必须将其称为XyzNLog,但我希望相同的别名设置也适用于合并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将所有依赖项内部化。这样做会将所有第三方类转换为声明为internal,这意味着它们只能从最终的DLL中使用。问题解决了!通过这种方式,我DLL的使用者也可以拥有NLog...因为我的引用NLog已经全部变为internal了!这正是我想要的。你们有什么反馈或想法吗?