2008-11-17 263 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來附加和運行您的應用程序。如果不能確定問題,這應該至少給出問題的線索。