我正在编写一个本地 CLR Profiler,它会进行一些繁重的 IL 重写。在开发新功能时,我们有时会遇到 CLR 验证错误。对于小型方法,比较前后的字节非常容易,查看各种元素(方法头、签名、局部变量、代码和异常表,主要是)并找到错误。有时,这可能是巨大的方法,这个过程可能需要一段时间。我正在尝试将当前模块转储到文件中,以便轻松运行 peverify.exe (和https://github.com/dotnet/corert/tree/master/src/ILVerify)。我发现了 IMetaDataEmit::Save,它在纸上看起来很完美(我们一直在使用 IMetaDataEmit 来执行 IL 重写)。我可以转储我的模块,在十六进制查看器中打开它并查看我所做的更改。但是,它只转储模块(PE 内的 .Net 目录)。如何从此模块创建完整的 PE (dll/exe),最好以编程方式?