2011-08-08 83 views
1

當我的電腦出現一些奇怪的症狀時,問題就出現了。Main()之前會發生什麼?

發生了什麼:我有一個用C#(.Net 2.0)編寫的WinForms應用程序。如果我從Visual Studio 2005運行它(調試或發佈),一切都很好。如果我嘗試從Windows運行它(運行由VS 2005中的調試過程生成的完全相同的可執行文件),我在Program類上得到一個 「System.TypeInitializationException」。

我在靜態構造函數和Main()中添加了調試日誌消息(File.AppentAllText())。靜態構造函數中的日誌消息被寫入,但Main()中的日誌消息不會。所以,顯然,在靜態構造函數完成之後以及在調用Main()之前發生了一些事情。

關於下一步看什麼的建議?在Main()方法被調用之前會發生什麼?

謝謝大家。

編輯:我認爲我應該指出,應用程序在其他計算機上運行得很好。 :)

+0

你能否提供完整的例外? – Jay

+0

System.TypeInitializationException未處理 消息:' .Program'的類型初始值設定項引發異常。 (命名空間剝離....) –

+0

對不起,我沒有更明確。 [TypeInitializationException](http://msdn.microsoft.com/en-us/library/system.typeinitializationexception.aspx)只是一個包裝。內部例外具有所有的好處。你能至少發佈內部異常的消息嗎? – Jay

回答

1

基於異常,它聽起來像是一個靜態構造函數或靜態字段的初始化在這裏拋出一個無用的異常。鑑於Main方法顯然沒有執行,它可能發生在Main方法中引用的類型,因此試圖由CLR初始化。

有幾種方法可以找出造成這種情況的原因。他們都不是很

  • 檢查程序的主要方法和分析發揮每一個類型,然後分析它們的靜態構造函數,看看哪些可以扔
  • 系統地註釋掉線路中的主要方法,以發現哪些一個是造成異常

或者,當您運行該程序時,它應該彈出一個錯誤對話框。在這一點上,附加到過程並挖掘異常,以查看哪種類型導致問題。

+0

Main方法的第一行是帶有調試消息的File.AppentAllText()。這不會寫入日誌文件。 :(此外,如果我嘗試附加一個調試器,我得到另一個錯誤:「調試器:: HandleIPCEvent,EventId = 0x201,異常代碼= 0xe06d7363,Eip = 0x7c812afb」 –

2

查看靜態構造函數中的代碼。 TypeInitializationException通常在靜態構造函數中存在異常時發生,因此無法初始化類型。代碼在IDE中可以正常工作,因爲它是從具有不同安全權限的不同用戶啓動的。作爲一個方面說明 - 我會盡可能避免使用靜態構造函數。

+1

問題:爲什麼我應該避免靜態構造函數? –

0

如果在* .config文件中有錯誤,您還會得到一個System.TypeInitializationException。在這種情況下檢查LineNumber的innerException。

+0

問題是,我沒有看到內部異常。請參閱下面的評論 –

+0

@Constantin當你在調試模式下啓動應用程序時開始彈出窗口應該打開異常(blabla),然後單擊「獲取詳細信息..」 – Skomski

+0

當我從VS 2005啓動應用程序(調試或發佈)時,我沒有得到任何錯誤,應用程序運行良好。我有這個問題:從VS它運行良好,從Windows,我得到的錯誤。 –

相關問題