2011-01-31 371 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

对我来说,当我在一个使用配置文件中的值初始化的类中有一个静态变量时发生错误。

配置文件没有值,导致类在初始化时发生异常。

相关问题