我有一组多个程序集(一个程序集用作 API,它依赖于其他程序集)。我想将所有程序集合并为一个程序集,但防止除 API 之外的所有程序集从外部可见。
然后我将使用 Xenocode 混淆这个程序集。据我所见,用 Xenocode 将程序集内部化是不可能的。
我看过微软的 ILMerge,但无法确定它是否能做我想做的事。 http://research.microsoft.com/~mbarnett/ILMerge.aspx
我有一组多个程序集(一个程序集用作 API,它依赖于其他程序集)。我想将所有程序集合并为一个程序集,但防止除 API 之外的所有程序集从外部可见。
然后我将使用 Xenocode 混淆这个程序集。据我所见,用 Xenocode 将程序集内部化是不可能的。
我看过微软的 ILMerge,但无法确定它是否能做我想做的事。 http://research.microsoft.com/~mbarnett/ILMerge.aspx
我使用微软的 ILMerge 将 DLL 内化到一个单独的组装库中。有一个用于使用 ILMerge 的有用 GUI,称为 NuGenUnify。你可以在这里找到它。
我知道 Xenocode 可以将程序集合并为一个,但我不确定它是否会内化其他非主程序集。
我发现 ILMerge 中的 /internalize 开关可以“内部化”除主要程序集之外的所有程序集。很实用!
我建议你看看MSDNInternalsVisibleTo
上的属性。
您可以将所有程序集(API 程序集除外)中的所有内容标记为internal
而不是public
,然后将它们重新显示为您的 API 程序集。
完成此操作后,使用 ILMerge 应该为您提供一个只有 API 类可见的程序集。
ILMerge存在一些问题,但我认为如果您添加优化 + 合并 + 混淆,您可能会创建一个高度复杂的情况而没有什么好处。
为什么不只有一个程序集,只公开你的 API?
如果您总是将它们作为单个程序集分发,那么没有理由不直接编译它们。您将从编译器优化中获得更多好处,并且编译速度也会更快。