我正在向我的客户部署一个桌面应用程序,该应用程序使用 Crystal Reports API 来显示和打印表单。
1)每当我尝试在客户端计算机上运行应用程序时,都会收到以下错误:
The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument'
threw an exception.
我不知道我在这里忘记了什么。CrystalDecisions.CrystalReports.Engine
dll 正在 GAC 中正确注册,大约 10 个其他 Crystal 程序集也是如此。
2)我在 SAP 论坛上问过这个问题,我被告知我需要将 .NET 2.0 Framework 与 .NET 4.0 Framework 一起包含在内。
答案
当静态构造函数抛出异常时,它会被包装在TypeInitializationException
。InnerException
属性以查看实际的异常。
在暂存/生产环境(未安装 Visual Studio)中,您需要:
- Trace/Log the exception and its InnerException (recursively): Add an event handler to the
AppDomain.UnhandledException
事件,并将您的日志记录/跟踪代码放在那里。System.Diagnostics.Debug.WriteLine
用于跟踪或记录器(log4net、ETW)。 - 使用生产调试器(例如 WinDbg 或 NTSD)来诊断异常。
- 使用 Visual Studio 的远程调试来诊断异常(使您能够从自己的开发计算机调试目标计算机上的代码)。