- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个让我发疯。
AssemblyDefinition asm1 = AssemblyDefinition.ReadAssembly(example);
AssemblyDefinition asm2 = AssemblyDefinition.ReadAssembly(example2);
asm2.MainModule.Types.Add(asm1.MainModule.Types[0]);
每当我尝试执行上面的代码时,我都会收到此错误“Type already attached”我决定在 MonoCecil 源代码中查看此错误,我发现它会引发此错误,因为类型的 MainMoudle 不是 asm2 MainModules。所以我决定将该类型复制到一个新类型。
TypeDefinition type2 = new TypeDefinition("", "type2", Mono.Cecil.TypeAttributes.Class);
foreach (MethodDefinition md in asm2.Methods )
{
type2.Methods.Add(md);
}
然后将此类型正常添加到我的程序集中,但这会引发另一个错误,“不支持指定的方法。”。有什么想法会导致我收到此错误吗?
编辑:补充一下,我要添加的类型包含一些使用指针的方法。这可能是问题所在吗?据我所知,单声道支持但不支持混合模式。
最佳答案
恐怕没有内置的简单方法可以做到这一点。
当您使用 Cecil 读取程序集时,每个元数据片段都由定义元数据的模块粘合在一起。您不能简单地从模块中获取方法并将其添加到另一个模块中。
为此,您需要将 MethodDefinition 克隆到绑定(bind)到其他模块的 MethodDefinition 中。同样,目前还没有为此内置任何内容。
我建议你看看IL-Repack ,这是一个开源的 ILMerge 克隆。它正是这样做的,它从不同的模块中获取类型,并将它们克隆到另一个模块中。
关于c# - 从另一个程序集添加 TypeDefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943340/
这个让我发疯。 AssemblyDefinition asm1 = AssemblyDefinition.ReadAssembly(example); AssemblyDefinition asm2
有人可以解释这种方法与 Add-Type 之间的区别吗 $definition = [Text.StringBuilder]"" [void]$definition.AppendLine('[
我正在使用 JB Evain 的 Mono.Cecil 对已编译的 DLL 执行一些字节码操作。该项目的一部分是将属性注入(inject)到 TypeDefinitions 中,使用 Property
我正在使用 JB Evain 的 Mono.Cecil 对已编译的 DLL 执行一些字节码操作。该项目的一部分是将属性注入(inject)到 TypeDefinitions 中,使用 Property
考虑以下 PowerShell 片段: $csharpString = @" using System; public sealed class MyClass { public MyClas
我正在尝试从 .NET 类型获取 Mono.Cecil TypeDefinition,但没有成功。 我正在使用这样的代码: var type = typeof(MarkdownMonster.AppC
我有一个在 powershell 中用内联 C# 定义的类: Add-Type -TypeDefinition @" public class SomeClass { stri
在我现有的项目中,我们已经在使用 React v0.14.7。我刚刚使用 npm: npm install --save react@0.14.7 react-dom@0.14.7 @types/re
我是一名优秀的程序员,十分优秀!