2008-11-17 127 views
6

我有一个.net 3.5 WinForms应用程序,可以在我的机器上正常运行,但在另一台机器上,它立即崩溃,并显示system.io.fileloadexception。不幸的是,没有关于哪个文件加载失败的详细信息,所以我不知道问题出在哪里。我相信我知道它可能是哪一个(SQL Server Compact版本),但在我漫无目的地搜索之前,我想知道是否有合适的方法来找出导致fileloadexception的原因,而不是从SysInternals中使用FileMon。排除故障system.io.fileloadexception

的唯一错误信息是:

的EventType clr20r3,P1 myapplication.exe,P2 2.1.0.0,P3 490eca78,P4所有MyApplication,P5 2.1.0.0,P6 490eca78,P7 2E,P8 21 P9 system.io.fileloadexception,P10 NIL。

回答

13

打开fusion logging

This blog entry从布拉德·威尔逊给出如果失败了怎么办......信息

+1

我完全错过了那个融合记录器。它在几分钟内解决了我的问题,因为日志非常有用。 FUSLOGVW.exe只能复制到一台机器上(不需要.net SDK),并且可以通过它设置日志记录设置。魔法。谢谢! – 2008-11-17 16:10:42

6

你可以尝试让你的Main()方法更强大的抓(和显示)异常... like so

通常,问题是太多的代码进入最外面的Main()方法。 JIT必须能够完全了解Main(),否则您的代码可以运行。通过使Main()更简单,你有机会。在链接的例子中,如果MainCore()失败:好的,我们仍然可以在Main()中发现异常。

这是有效的,因为JIT是逐个方法完成的......即MainCore()在被调用之前不会被打印,此时我们已经有了我们的try/catch。

1

抓住Microsoft调试工具SDK,并使用windbg或cordbg来附加和运行您的应用程序。如果不能确定问题,这应该至少给出问题的线索。