2013-06-20 116 views
0

我的Windows窗體應用程序(我稱之爲MyApplication.exe)比我的dev的機器之外的機器上,一個對話框彈出說:如何當我嘗試打開診斷「System.TypeLoadException」錯誤


MyApplication已停止工作

Windows可以解決網上查詢到的問題

  • 檢查在線的解決方案,並關閉程序
  • 關閉程序

詳細

問題簽名:

Problem Event Name: CLR20r3 
    Problem Signature 01: myapplication 
    Problem Signature 02: 1.2.0.0 
    Problem Signature 03: 51c34395 
    Problem Signature 04: mscorlib 
    Problem Signature 05: 4.0.0.0 
    Problem Signature 06: 50484bd7 
    Problem Signature 07: 1204 
    Problem Signature 08: 89 
    Problem Signature 09: System.TypeLoadException 
    OS Version: 6.1.7600.2.0.0.256.48 
    Locale ID: 1033 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

重要的是要注意,我用ILMerge合併MyApplication.exe和引用的MyLibrary.dll裝配成一個裝配(輸出的名稱是MyApplication.exe)。

此外,重要的是要注意,測試機器能夠在沒有問題的情況下運行.exe,直到我發佈了一個向MyApplication項目添加extension method的更新。

換句話說,之後我加入了擴展方法MyApplication,然後用ILMerge的.exe文件合併和.dll,測試機將收到上面的錯誤(有趣的是,我的開發機可以運行與合併後的.exe文件沒問題)。

是否有一個已知問題w/ILMerge和擴展方法?這聽起來很奇怪,但這是我的代碼中唯一改變的東西。

由於我無法在我的開發機器上重現問題,對於如何解決測試機器上發生的System.TypeLoadException錯誤,您有任何建議嗎?

系統信息

  • 瞄準的.NET Framework 4.0(我所有的測試機器安裝了這個)
  • ILMerge版本2.12.803
  • 開發機:Windows 2008 Server的R2; Visual Studio 2010的專業版
  • 客戶機:XP,Win7的,Win8的和(所有的人都得到錯誤)
+0

做些什麼版本的.NET框架的客戶端機器已經安裝?它是3.5還是甚至是客戶端版本? – ChrisF

+0

他們都已經安裝了4.0,在您的生成機器上安裝了 – Jed

+0

,是否安裝了.net 4.5? –

回答

1

如果您有.NET 4.5安裝到您的生成計算機上,它會打破,如果你的不小心。

基本上,Microsoft改變了1個屬性的位置(從System.Core到mscorlib)。

Matt Wrock在his post中解釋瞭如何用ILMerge解決這個問題。雖然這是測試版,它應該與該版本一起工作。

+0

我有同樣的問題彈出。我添加了1個擴展方法,並在安裝了4.5的計算機上構建了目標4.0。即使不使用IL合併,也會出現相同類型的加載異常刪除擴展方法解決了問題。 –

1

Matt Wrocks的帖子(謝謝@Daniel White),有我正在尋找的信息。但是,他指定的/ targetplatform路徑對我無效。

相反Wrocks路徑

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 

我不得不使用

/targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 
相關問題