我有一个生成程序集的编译器。当我加载程序集并尝试在其类位于该程序集中的对象上运行方法时,它会抛出一个异常:
系统。InvalidProgramException:公共语言运行库检测到一个无效程序。
作为错误消息,这只是与UR COMPILER SUXX0RZ LOLOLOL!!!
完全相同的信息,在MSDN上查找它说同样的事情:编译器有问题。
所以我尝试在生成的程序集上运行PEVerify,并得到一个稍微更有用的消息:
不幸的是,除此之外,它什么也没说,比如哪个签名有非法的void。你知道的,就是那种对追踪报告的错误很有用的东西…[MD]:错误:在签名中非法使用void类型。(令牌:0 x11000002)
在ILDASM中打开它,我没有看到任何明显错误的空白,那么下一步是什么?我从哪里去弄清楚我的编译器做错了什么?
可以使用/TOKENS
参数IL DASM。这使得IL asm将令牌的值显示为注释。给定PEVerify错误消息中的令牌值,您可以轻松地定位程序集的问题元素。