【发布时间】:2026-02-16 12:00:02
【问题描述】:
我正在使用 Reflection.Emit 生成一个动态程序集,其中包含一个类。我有一个导致 BadImageException 的错误。为了解决这个问题,我需要查看编译后的代码,因此我将动态程序集保存到磁盘。
我已经针对似乎认为没有错误的程序集尝试了 PEVerify。我现在想在 Reflector 中查看生成的代码,但程序集显示为空(我知道它不是)。
知道为什么会这样吗?
var assemblyName = new AssemblyName("An.Assembly");
var appDomain = Thread.GetDomain();
var assemblyBuilder = appDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
var typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public | TypeAttributes.Class);
...
typeBuilder.CreateType();
assemblyBuilder.Save("temp.dll");
顺便说一句,我已经在使用 Relection.Emit 反射器插件,但这对解决这个问题没有帮助。
【问题讨论】:
-
BadImageFormatException?这很奇怪。更好地记录异常,消息 + 堆栈跟踪。
-
用ildasm看也是空的吗?
-
不,这是由于IL代码的发出错误导致的BadImageException。即使我恢复我的代码以使其不会引发异常,我仍然无法在 Reflector 中查看发出的代码。
-
是的,ildasm 也是空的。不知道我错过了什么。
标签: c# reflection.emit .net-reflector