"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 值,您可以轻松定位程序集的问题元素。
我有一个正在生成程序集的编译器。当我加载程序集并尝试对 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 值,您可以轻松定位程序集的问题元素。