从C#DLL到Mono生成元数据(“绑定”库)

从C#DLL到Mono生成元数据(“绑定”库),c#,.net,binding,mono,wrapper,C#,.net,Binding,Mono,Wrapper,我有一个针对Windows8的C#library项目 我想构建一个与tblimp类似的工具: 检查库(DLL)中的所有公共类型 将它们导出到一个新的“包装器”DLL(方法体将留空,尽管可以配置此行为) 新生成的DLL可以在不支持原始DLL的其他项目中引用(只是为了构建项目,因为方法本身不包含任何功能) 主要的好处是使用生成的DLL作为Mono项目的参考 是否有任何工具允许这样做?我认为如果您可以使用Mono.Cecil解析原始DLL,这是可能的(如果在某些情况下,Cecil失败,您可能需要修补它

我有一个针对Windows8的C#library项目

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

  • 检查库(DLL)中的所有公共类型
  • 将它们导出到一个新的“包装器”DLL(方法体将留空,尽管可以配置此行为)
  • 新生成的DLL可以在不支持原始DLL的其他项目中引用(只是为了构建项目,因为方法本身不包含任何功能)

    主要的好处是使用生成的DLL作为Mono项目的参考


    是否有任何工具允许这样做?

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

    有许多基于Cecil的开源项目可以引导您走上这条道路,例如Obfuscar(一种开源模糊处理程序)


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

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

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


    如果您对这样的工具感兴趣,我将在几天后创建一个GitHub repo,并在那里发布代码。

    此工具已经存在。它与早期版本的.NET framework一起提供。这叫“肥皂水”


    原始DLL是.NET-DLL还是其他类型的DLL?什么样的项目是不能引用原始DLL的项目?它们是.NET项目还是其他类型的项目?我想使用一个Windows应用商店库DLL(C#)并包装其所有代码,以便可以从Mono中引用。我很确定我们都是出于不同的原因这样做的。。。这种工具你有什么用/