2011-01-31 115 views
6

我已經Google搜索和廣泛調試,我找不出什麼原因導致此異常。重新安裝.NET框架有時可以解決這個問題,但它看起來有點粗略:修復:TypeInitializationException:'<Module>'的類型初始值設定項引發了一個異常

TypeInitializationException: The type initializer for '&lt;Module&gt;' threw an exception. 
    The C++ module failed to load during appdomain initialization. 

     The system cannot find the file specified 

StackTrace: 
    at CModuleInitialize.LoadWpfGfx(CModuleInitialize*) 
    at CModuleInitialize.{ctor}(CModuleInitialize*) 
    at [email protected]@@YMXXZ() 
    at _initterm_m((fnptr)* pfbegin, (fnptr)* pfend) 
    at &lt;CrtImplementationDetails&gt;.LanguageSupport.InitializePerAppDomain(LanguageSupport*) 
    at &lt;CrtImplementationDetails&gt;.LanguageSupport._Initialize(LanguageSupport*) 
    at &lt;CrtImplementationDetails&gt;.LanguageSupport.Initialize(LanguageSupport*) 

任何線索?

語境

這是一個WinForms應用程序,用C#編寫寫在WPF新組件的屈指可數。我們得到的崩潰報告不包含比我所展示的更多的上下文(堆棧跟蹤等),並且我們沒有執行任何C++,託管或其他方式。

我還沒有能夠重現這次崩潰,但一些客戶的遠程診斷表明,重新安裝.NET框架可能會修復該客戶的這個問題。

報告此崩潰的客戶多次執行此操作,看來他們無法使用應用程序,直到重新安裝.NET框架,或者他們還原爲僅使用.NET 2.0的應用程序的舊版本

鏈接

Some links表明.NET框架,或Visual Studio與此崩潰的beta版本之間可能的聯繫,但是,似乎在這種情況下不容易。

另一種可能的連接可能與Visual C++ 2005可再發行組件有關。

+0

您能否提供更多信息 - 您使用的是什麼語言,發生此異常時,您想要做什麼,例如(看起來像Managed C++)?考慮到您目前提供的少量信息是非常困難的 – 2011-01-31 16:05:53

+0

基恩的優點;我會在問題的主體中增加更多內容。 – 2011-01-31 16:17:11

回答

8

您正在研究用C++/CLI編寫的代碼PresentationCore。名稱<Module>是所有全局C++/CLI函數的類名。它會在組裝程序加載完成後立即炸彈,模塊初始化程序失敗。 LoadWpfGfx()完成的確切工作沒有記錄在我知道的任何地方,但很容易被猜到。它正在加載實現圖形界面的非託管DLL,可能是DirectX界面層。

這是機器特有的問題。該函數檢查註冊表以找到正確的DLL,然後使用LoadLibrary()加載它。很明顯,DLL缺失。您的客戶需要再次使其機器穩定,然後重新安裝.NET。如果他們仍然有麻煩,那麼他們可以使用SysInternals的ProcMon工具來查看哪些註冊表項和正在搜索的DLL。

0

我有相同的錯誤信息。我使用的是.NET Framework 3.0的一個組件,但我的應用程序的目標是2.0。在他們的機器上安裝了3.0的用戶在運行我的應用程序時沒有問題,但那些沒有運行它的用戶無法運行它。

不是我期望的許多問題,但這是一種可能性。

2

這讓我頭疼幾個月。 我的代碼是使用Oxygene Pascal編譯器構建的,與VS 2012完全集成。TypeInitializationException在..cctor無法完成其工作時發生。

當我在一個遠程主機上的IIS 7.5上的WCF網站Web服務上訪問時,我做了什麼來發現爲什麼我的C#類庫代碼運行,並且我的Oxygene類lib代碼經常失敗,但是兩者在一個完美的當地規模,在VS 2012單元測試中完美工作。

OK,這是一個類庫 1.我在CS寫了一個類庫ToolboxCS.cs 2.我寫了相同的類庫中OXYGENE ToolboxPAS.pas 3.一個ToolboxCS遠程運行和ToolboxPAS遠程失敗 4.讓我們看看兩個代碼 4A)

using System; 
using System.Runtime.CompilerServices; 
using System.Runtime.InteropServices; 
namespace ToolboxCS 
{ 
    [CompilerGenerated] 
    [StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)] 
    public static class __Global 
    { 
     public static string Stop_Time = "1949.Mar.19"; 
    } 
} 

4b)上OXYGENE樣品

namespace ToolboxPAS; 
interface 
uses 
    System; 
VAR 
    Stop_Time: String := "1949.Mar.19"; 
implementation 
end. 

然後,我把ILSpy.exe看代碼克發現,發現代碼反彙編到CS是一樣的。但在ILSPy.exe的兩個例子的程序集信息看,我可以看到許多差異,其中一些沒有效果,但下面顯示的是我的Oxygene ToolboxPAS.pas類lib的殺手,當它應該運行在IIS 7.5 - >程序w3wp.exe - > xyxyxyxyxy.dll - > ToolboxPAS.dll

{$IFDEF DEBUG} 
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default or 
DebuggableAttribute.DebuggingModes.DisableOptimizations or 
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints or 
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] 
{$ENDIF} 

換句話說,如果你做一個調試版本,這個屬性在程序集信息文件你的CS代碼將不會顯示組件。但是你會看到這個屬性生成並使用ILSpy.exe查看生成的DLL。

而且,在將此屬性添加到我的ToolboxPAS.pas Assembly Info文件(如上所示)以進行調試構建後,它不再引發InitializationException,以便只訪問其中的一個簡單變量。

因爲我改變了我的大型DLL類庫(12個DLL)的所有程序集信息文件,當它們作爲WCF文本站點Web服務部署到遠程Web服務器IIS 7.5時,它們都像sniff一樣運行。

0

對我來說,當我在一個使用配置文件中的值初始化的類中有一個靜態變量時發生錯誤。

配置文件沒有值,導致類在初始化時發生異常。

相關問題