我有一个针对Windows 8的C#库项目。
我想构建一个与 tblimp 的行为类似的工具:
新生成的DLL可以在其他不支持原始DLL的项目中引用(仅仅是为了构建项目,因为这些方法本身不包含任何功能)。
主要好处是使用生成的DLL作为Mono项目的参考。
是否有任何工具允许这样做?
答案 0 :(得分:1)
我认为如果你可以使用Mono.Cecil来解析原始的dll(如果在某些极端情况下你可能需要修补Cecil,它就失败了)。然后使用内存中的对象,可以生成磁盘所需的任何程序集,并将生成的程序集用于您的目的。
有许多基于Cecil的开源项目可以引导您走上这条道路,例如Obfuscar(开源混淆器),
答案 1 :(得分:0)
我现在正在做同样的事情 - 我正在创建一个名为Piranha的工具,它删除所有代码,所有非公共成员只留下一个“骨架”。 要使生成的库CLS兼容并不容易。 构造函数存在问题:构造函数需要调用基类型构造函数。但是如果它调用的构造函数是内部的呢? 结构存在问题:看起来你不能只删除所有私有字段,因为需要知道结构的大小(对于可验证的程序集)。
但是创建一个骨架库是不够的。您还需要重新映射/删除引用。您的Windows 8库引用了WinRT库,Mono库不会使用它。你必须用一些配置文件替换最有可能的PCL引用的WinRT库引用。我还没有完成这部分。
还有其他引用的库。他们将使用它们拖动特定于平台的引用。因此,我们需要删除这些引用(以及依赖于这些库中的类型的所有成员)或将库转换为骨架(并重新映射引用)。
如果您对此类工具感兴趣,我会在几天内创建一个GitHub仓库并在那里发布代码。
答案 2 :(得分:0)
此工具已存在。它随早期版本的.NET框架一起提供。它被称为“SoapSuds。”