2009-10-12 71 views
2

當Windows服務安裝程序爆炸時出現「Error 1001.無法獲取MyService.exe程序集中的安裝程序類型」。所以它無法加載MyServiceInstaller。 Fusion日誌記錄顯示,在嘗試查找Data.dll程序集時它失敗。我可以確定觸發組件載荷的是什麼嗎?

事情是,它不應該加載Data.dll來創建我的服務安裝程序對象。我認爲只有在調用包含這些類型的方法之前,纔會觸發類型加載。一些MyServiceInstaller方法引用Data.dll中的類型,但不包含任何ctor。

就好像加載MyService.exe或探測MyServiceInstaller的行爲調用Data.dll的加載一樣。根據我的理解,融合日誌記錄不會告訴我我需要知道什麼。這一點已經太遲了。我需要知道加載MyServer.exe或首先觸發加載Data.dll的MyServiceInstaller的探測是什麼。

有一個業務要求Data.dll不能放在MyService.exe旁邊。事實上,這確實解決了這個問題。我有一個自定義的AssemblyResolve事件,它在正常運行時加載Data.dll。

回答

1

嘗試將調試器附加到安裝程序,並在引發異常時使其中斷(可以在Visual Studio中的「調試/例外」中進行設置)。通常情況下應該有一個FileNotFoundException或類似的東西在安裝程序內部拋出,當程序集加載失敗時可能會捕獲到其他地方,但如果在異常時拋出(和而不是未處理時)您可以介入並獲取堆棧跟蹤,這應該可以幫助您發現究竟導致問題的原因。

您應該看到在堆棧跟蹤這樣的事情:

  • [Uninteresting native and/or external code]
  • SomeClassInYourInstaller.SomeMethod() <-- this is the responsible method
  • SomeOtherStuff.SomeMethod()
  • ...etc...
+0

如何調試器附加到嘗試installer..i做到這一點,但我無法做到這一點 – 2014-03-25 11:55:31

0

也許在Data.dll中定義了一種類型的實例變量(字段)當加載MyServiceInstaller時,所有字段的類型都需要可用,即使它們沒有被使用,因爲如果創建了一個實例,該類將被編譯。

相關問題