内部化.NET程序集中的类和方法

时间:2008-08-25 19:51:31

标签: c# .net vb.net assemblies

我有一组多个程序集(一个程序集将用作API,它依赖于其他程序集)。我想将所有程序集合并到一个单独的程序集中,但是防止除了API之外的所有程序集从外部可见。

然后我将使用Xenocode对此程序集进行混淆。从我所看到的情况来看,不可能使用Xenocode内部组装。

我见过微软的ILMerge,但无法确定它是否可以做我想要的。 http://research.microsoft.com/~mbarnett/ILMerge.aspx

4 个答案:

答案 0 :(得分:2)

我使用了来自microsoft的ILMerge将DLL内部化为单个汇编的库。有一个有用的GUI用于使用名为NuGenUnify的ILMerge。你可以找到它here

答案 1 :(得分:1)

我知道Xenocode可以将程序集合并为一个,但我不确定它是否会内化其他非主要程序集。

我在ILMerge中找到了/ internalize开关,它“内化”了除主要组件之外的所有组件。非常有用!

答案 2 :(得分:1)

我建议您查看MSDN上的InternalsVisibleTo属性。

您可以将所有程序集(API程序集除外)中的所有内容标记为internal而不是public,然后将它们重新显示为您的API程序集。

完成后,使用ILMerge应该只给出一个只有API类可见的程序集。

答案 3 :(得分:1)

有一些issues with ILMerge,但我认为如果你添加优化+合并+混淆,你可能会创造一个非常复杂的情况,但收效甚微。

为什么不只有一个程序集,只公开你的API?

如果您总是将它们作为单个程序集分发,那么没有理由不将它们编译为单独的程序集。您将从编译器优化中获得更多好处,并且编译速度也会更快。