【发布时间】:2023-04-01 05:43:01
【问题描述】:
我正在开发一个编译器,它在某些扩展生成器的情况下会产生错误的输出。 PEVerify 只是说“类型加载失败”而没有解释原因。当我过去看到这种情况时,通常是因为生成的类型具有错误数量的泛型参数,但这里似乎一切都匹配。
有没有什么好的方法可以获取有关生成的类型出了什么问题的更详细信息?除此之外,是否有任何好的提示和技术来追踪错误?
PEVerify 的输出:
C:\Build\Test>验证 testcase.exe /VERBOSE /UNIQUE
Microsoft (R) .NET Framework PE 验证程序。版本 4.0.30319.0 版权所有 (c) 微软公司。保留所有权利。
[IL]:错误:[C:\Build\Test\testcase.exe : Testing.Linq_operatorModule::IndexWhereImpl[T]][mdToken=0x6000002][offset 0x00000002] 无法解析令牌。
[IL]:错误:[C:\Build\Test\testcase.exe:Testing.Linq_operatorModule+$IndexWhereImpl$3`1[T]::.ctor][mdToken=0x6000006] [HRESULT 0 x8007000B] - 试图加载格式不正确的程序。
[token 0x02000004] 类型加载失败。
3 验证 testcase.exe 的错误
来自 ILDasm 的综合转储是 here,因为它太大而无法放入 SO 帖子。
【问题讨论】:
-
这不是你的原因,但我得到了“类型加载失败”,因为我忘记将“newslot”修饰符添加到方法中。
标签: c# .net cil ildasm peverify