提问人:Vincent 提问时间:8/26/2008 最后编辑:starblueVincent 更新时间:6/10/2012 访问量:1359
内部化 .NET 程序集中的类和方法
Internalize Class and Methods in .NET Assembly
问:
我有一组多个程序集(一个程序集用作 API,它依赖于其他程序集)。我想将所有程序集合并到一个程序集中,但防止除 API 程序集之外的所有程序集从外部可见。
然后,我将使用 Xenocode 混淆此程序集。据我所知,使用 Xenocode 内部化汇编是不可能的。
我看过Microsoft的ILMerge,但无法弄清楚它是否可以做我想做的事。http://research.microsoft.com/~mbarnett/ILMerge.aspx
答:
我知道 Xenocode 可以将程序集合并为一个,但我不确定它是否会内化其他非主程序集。
我在 ILMerge 中找到了 /internalize 开关,该开关“内部化”了除主程序集之外的所有程序集。非常有用!
我使用 Microsoft 的 ILMerge 将 DLL 内化为单个组装库。有一个有用的 GUI 可用于使用 ILMerge,称为 NuGenUnify。你可以在这里找到它。
我建议你看看MSDN上的属性。InternalsVisibleTo
您可以将所有程序集(API 程序集除外)中的所有内容标记为 instead 而不是 ,然后将它们重新显示到您的 API 程序集。internal
public
完成此操作后,使用 ILMerge 应提供一个仅可见 API 类的程序集。
ILMerge 存在一些问题,但我认为如果您添加优化 + 合并 + 混淆,您可能会创建一个高度复杂的情况,但收效甚微。
为什么不只有一个程序集,只公开你的 API?
如果您总是将它们作为单个程序集分发,则没有理由不将它们编译为单个程序集。您将从编译器优化中获得更多好处,并且编译速度也会更快。
上一个:获取实现接口的所有类型
评论