8

是否存在用于将单个 .NET 程序集拆分为完整程序集子集的实用程序?即ILMerge.exe 的“反函数”?

当然,如果必须跟踪类、函数等之间的依赖关系等,该工具将很难生产。

但是,我正在寻找的情况是,我有一个非常大(数百 MB)的混合模式程序集,其中大部分是静态类和静态方法,基本上只是一个函数库。虽然,与一些 DLLMain 初始化和类似。

我想要的是能够在我想保留在子集程序集中的特定静态类上指定静态方法列表。从技术上讲,这应该是可能的,因为程序集只是具有标准化格式的二进制信息。

那么这是否存在或如何做到这一点?或者为什么这是不切实际的?

4

1 回答 1

3

不,这个工具不存在的可能性很高。尽管该工具的缺失永远无法被否定。

这些 IL 重写技巧无论如何都不适用于混合模式程序集,ILMerge 也不支持它们。这样的程序集不仅包含 IL,它们还具有机器代码和重定位表。没有简单的方法可以区分机器代码,主要是因为它不仅仅是纯代码,还包含数据。就像 switch 语句的跳转表一样。这也是使用本机语言编写代码的程序员不关心混淆器的原因。反编译机器代码是一个主要的时间消耗并且总是不完美的。

因此,一方面,您的程序集很可能很大,因为它有很多本机代码。您需要在项目级别解决这个问题,并将这个 mongo 项目拆分为更小的项目,在它们之间分发源代码。那是工作。而且并不总是那么容易,当你这样做时,链接器错误是一个常见的祸害。而且您可能必须更改代码声明才能导出它们。只有一种方法可以做到这一点,从头开始并首先拆分一个子部分,所以现在你有一个不太大的组件和一个小组件。冲洗并重复。请注意成本,许多组件会使程序的冷启动速度变慢。

于 2013-05-31T13:03:41.127 回答