我正在向我的客户部署一个桌面应用程序,该应用程序使用 Crystal Reports API 来显示和打印表单。

1)每当我尝试在客户端计算机上运行应用程序时,都会收到以下错误:

The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' 
      threw an exception.

我不知道我在这里忘记了什么。CrystalDecisions.CrystalReports.Enginedll 正在 GAC 中正确注册,大约 10 个其他 Crystal 程序集也是如此。

2)我在 SAP 论坛上问过这个问题,我被告知我需要将 .NET 2.0 Framework 与 .NET 4.0 Framework 一起包含在内。

答案

当静态构造函数抛出异常时,它会被包装在TypeInitializationExceptionInnerException属性以查看实际的异常。

在暂存/生产环境(未安装 Visual Studio)中,您需要:

  1. Trace/Log the exception and its InnerException (recursively): Add an event handler to the AppDomain.UnhandledException事件,并将您的日志记录/跟踪代码放在那里。System.Diagnostics.Debug.WriteLine用于跟踪或记录器(log4net、ETW)。
  2. 使用生产调试器(例如 WinDbg 或 NTSD)来诊断异常。
  3. 使用 Visual Studio 的远程调试来诊断异常(使您能够从自己的开发计算机调试目标计算机上的代码)。

来自: stackoverflow.com