0

我有一个针对 Windows 8 的 C# 库项目。

我想构建一个与tblimp类似的工具:

  1. 浏览库 (DLL) 中的所有公共类型。
  2. 将这些导出到一个新的“包装器”DLL 中(方法体将留空,尽管可以配置此行为)。

新生成的 DLL 可以在不支持原始 DLL 的其他项目中引用(只是为了构建项目,因为方法本身不包含任何功能)。

主要好处是使用生成的 DLL 作为对 Mono 项目的引用。

有没有允许这样做的工具?

4

3 回答 3

1

我认为如果您可以使用 Mono.Cecil 解析原始 dll,这是可能的(如果在某些极端情况下失败,您可能需要修补 Cecil)。然后使用您在内存中获得的对象,您可以生成您需要存储的任何程序集,并将生成的程序集用于您的目的。

有很多基于 Cecil 的开源项目可以引领你走这条路,比如 Obfuscar(一个开源混淆器),

http://obfuscar.codeplex.com/

于 2013-05-03T06:51:52.390 回答
0

我现在也在做同样的事情——我正在创建一个名为 Piranha 的工具,它删除所有代码和所有非公共成员,只留下一个“骨架”。使生成的库 CLS 兼容并不容易。构造函数存在问题:构造函数需要调用基类型构造函数。但是如果它调用的构造函数是内部的呢?结构存在问题:看起来您不能只删除所有私有字段,因为需要知道结构的大小(对于可验证的程序集)。

但是创建一个骨架库是不够的。您还需要重新映射/删除引用。您的 Windows 8 库引用 WinRT 库,不会被 Mono 库使用。您必须将 WinRT 库引用替换为很可能是某个配置文件中的 PCL 引用。我还没有完成这部分。

还有其他引用的库。他们将与他们一起拖动特定于平台的引用。因此,我们需要删除这些引用(以及依赖于这些库中类型的所有成员)或将库转换为骨架(并重新映射引用)。

如果您对此类工具感兴趣,我将在几天后创建一个 GitHub 存储库并将代码发布到那里。

于 2013-05-27T23:21:18.920 回答
0

该工具已经存在。它附带早期版本的 .NET 框架。它被称为“肥皂泡”。

https://support.microsoft.com/en-us/kb/323491

于 2015-06-18T02:53:31.803 回答