C# 是否存在与ILMerge.exe等效的ILSplit.exe,或者如何实现?

C# 是否存在与ILMerge.exe等效的ILSplit.exe,或者如何实现?,c#,.net,il,ilmerge,mixed-mode,C#,.net,Il,Ilmerge,Mixed Mode,是否存在用于将单个.NET程序集拆分为完整程序集子集的实用程序?即ILMerge.exe的“功能反转” 当然,如果必须跟踪类、函数等之间的依赖关系,则很难生成此工具 然而,我要寻找的是一个非常大(数百MB)的混合模式程序集,其中大部分是静态类和静态方法,基本上只是一个函数库。不过,使用一些DLLMain初始化和类似的方法 我想要的是能够在特定的静态类上指定静态方法的列表,这些静态类是我想要保留在子集程序集中的。从技术上讲,这应该是可能的,因为程序集只是具有标准格式的二进制信息 那么这是否存在,或

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

当然,如果必须跟踪类、函数等之间的依赖关系,则很难生成此工具

然而,我要寻找的是一个非常大(数百MB)的混合模式程序集,其中大部分是静态类和静态方法,基本上只是一个函数库。不过,使用一些DLLMain初始化和类似的方法

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


那么这是否存在,或者如何实现?或者这为什么不切实际?

不,很有可能这个工具不存在。尽管这种工具的缺失永远无法被正面反驳

这些IL重写技巧对混合模式程序集不起作用,ILMerge也不支持它们。这样的程序集不仅包含IL,还包含机器代码和重定位表。没有简单的方法来区分机器代码,主要是因为它不仅是纯代码,而且还包含数据。类似于switch语句的跳转表。还有一个原因是,用母语编写代码的程序员不需要使用模糊器。反编译机器代码是一个主要的时间消耗,而且总是不完美的


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

看起来不是个好主意。如果生成一个引用a.Dll的项目P.exe,但a的函数已移动到B.Dll,该怎么办?您应该在源代码级别一次性重构DLL,而不是像这样进行调整。是的,当然,这是推荐的方法,但出于一些原因,以后再这样做会更理想。由于混合模式的性质,我猜这将是非常困难的。大小来自于大量本地lib的链接。你的评论还暗示我可以访问源代码。至于你回答的第二部分:OP暗示他们没有程序集的源代码。