内化.NET Assembly中的类和方法
时间:2020-03-05 18:42:58 来源:igfitidea点击:
我有一组多个程序集(一个程序集将用作API,它取决于其他程序集)。我想将所有程序集合并为一个程序集,但要防止从外部可见除API之外的所有程序集。
然后,我将使用Xenocode混淆此程序集。从我所看到的,用Xenocode内部化程序集是不可能的。
我已经从Microsoft看过ILMerge,但是无法确定它是否可以满足我的要求。
http://research.microsoft.com/~mbarnett/ILMerge.aspx
解决方案
回答
我知道Xenocode可以将程序集合并为一个,但是我不确定它是否会内部化其他非主程序集。
我发现ILMerge中的/ internalize开关可以"内部化"除主装配以外的所有装配。挺有用的!
回答
我使用了Microsoft的ILMerge将DLL内部化为一个组装的库。有一个使用ILMerge的有用GUI,称为NuGenUnify。你可以在这里找到它。
回答
我建议我们查看MSDN上的InternalsVisibleTo
属性。
我们可以将所有程序集(API程序集除外)中的所有内容标记为"内部",而不是"公共",然后将它们重新显示为API程序集。
完成此操作后,使用ILMerge应该会为我们提供一个仅具有可见API类的程序集。
回答
ILMerge存在一些问题,但是我认为,如果添加优化+合并+模糊处理,很可能会造成非常复杂的情况,而带来的好处却很少。
为什么不只有一个程序集,而只公开API?
如果我们始终将它们作为单个程序集分发,则没有理由不只是那样编译它们。我们将从编译器优化中获得更多收益,并且编译起来也将更快。