"Illegal use of type 'void' in signature" 是什么意思?

What does "Illegal use of type 'void' in signature" mean?

我有一个正在生成程序集的编译器。当我加载程序集并尝试对 class 位于该程序集中的对象执行 运行 方法时,它会引发异常:

System.InvalidProgramException: Common Language Runtime detected an invalid program.

随着错误消息的出现,这与 UR COMPILER SUXX0RZ LOLOLOL!!! 提供的信息完全一样,在 MSDN 上查找它也说了同样的事情:编译器出了点问题。

所以我在生成的程序集上尝试了 运行ning PEVerify 并得到了 稍微 更有用的消息:

[MD]: Error: Illegal use of type 'void' in signature. [token:0x11000002]

不幸的是,它没有说除此之外的任何内容,例如什么签名有非法无效。您知道,这种东西对跟踪报告的错误很有用...

在 ILDASM 中打开它,我没有看到任何明显错误的 void-ness,那么下一步是什么?我从哪里可以找出我的编译器做错了什么?

您可以对 IL DASM 使用 /TOKENS 参数。这使得 IL DASM 将令牌的值显示为注释。根据 PEVerify 错误消息中的 token 值,您可以轻松定位程序集的问题元素。