【发布时间】:2011-01-29 00:06:12
【问题描述】:
例如,假设我想在我的 DLL 中使用 Bouncy Castle。因为我想简化部署,所以我使用 ILMerge 将MyDll.dll 和BouncyCastle.Crypto.dll 组合起来生成MyDllMerged.dll。我在 ILMerge 中使用 /internalize 标志,这样客户就不会使用我的 Bouncy Castle。
如果我的消费者 EndUser.exe 也使用 Bouncy Castle,他会看到“Org.BouncyCastle...TypeFoo 已在 MyDllMerged.dll 中定义”。因此,他注定无法自己使用他的那个图书馆。
除了内部化之外,还有没有告诉 ILMerge 重命名程序集中的所有命名空间?或者有什么其他方法可以解决这个问题? (我希望不必必须分别分发“合并”版本和“未合并”版本。)
【问题讨论】:
-
不确定我是否遵循,/internalize 是为了确保用户不会注定失败。他看不到 TypeFoo,它是内部的。
-
@Hans Passant:我是这么想的,但我做了一个简单的实验来证明这一点。事实证明,即使用户看不到
TypeFoo,它实际上就在那里,并且会在编译过程中导致最终的命名空间冲突错误。