因为我使用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