ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 从另一个程序集添加TypeDefinition

2019-05-30 17:03:43  阅读:281  来源: 互联网

标签:c mono-cecil


这个让我发疯.

AssemblyDefinition asm1 = AssemblyDefinition.ReadAssembly(example);
AssemblyDefinition asm2 = AssemblyDefinition.ReadAssembly(example2);
asm2.MainModule.Types.Add(asm1.MainModule.Types[0]);

每当我尝试执行上面的代码时,我都会收到此错误“Type has attached”
我决定在MonoCecil源代码中查看此错误,我发现它会抛出此错误,因为Type的MainMoudle不是asm2 MainModules.所以我决定将该类型复制到一个新类型.

TypeDefinition type2 = new TypeDefinition("", "type2",  Mono.Cecil.TypeAttributes.Class);
foreach (MethodDefinition md in asm2.Methods )
{
        type2.Methods.Add(md);
}

然后将此类型正常添加到我的程序集中,但这会引发另一个错误,“不支持指定的方法.”.
有什么想法,我收到这个错误?

编辑:只是添加,我试图添加的类型包含一些使用指针的方法.这可能是问题吗?据我所知,mono支持但不支持混合模式.

解决方法:

我担心没有内置的,简单的方法来做到这一点.

当您使用Cecil读取程序集时,每个元数据都由模块粘合在一起定义元数据.您不能简单地从模块中获取方法,并将其添加到另一个模块中.

要实现此目的,您需要将MethodDefinition克隆到与另一个模块绑定的MethodDefinition中.同样,还没有内置任何东西.

我建议你看看IL-Repack,这是一个开源的ILMerge克隆.它就是这样,它从不同的模块中获取类型,并将它们克隆到另一个模块中.

标签:c,mono-cecil
来源: https://codeday.me/bug/20190530/1184772.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有