The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception
Here is what worked for me:
If you are installing on a 64-bit machine, make sure the application properties under the Build tab have "Any CPU" as the platform target, and unselect the check box for "Prefer 32-bit" if you have the option. Crystal is very touchy about 32/64 bit assemblies, and makes some pretty counterintuitive assumptions which are very difficult to troubleshoot.
When a static constructor throws an exception, it is wrapped inside a TypeInitializationException
. You need to check the exception object's InnerException
property to see the actual exception.
In a staging / production environment (where you don't have Visual Studio installed), you'll need to either:
- Trace/Log the exception and its InnerException (recursively): Add an event handler to the
AppDomain.UnhandledException
event, and put your logging/tracing code there. UseSystem.Diagnostics.Debug.WriteLine
for tracing, or a logger (log4net, ETW). DbgView (a Sysinternals tool) can be used to view the Debug.WriteLine trace. - Use a production debugger (such as WinDbg or NTSD) to diagnose the exception.
- Use Visual Studio's Remote Debugging to diagnose the exception (enabling you to debug the code on the target computer from your own development computer).
I had similar message and after several searches online and doing all suggestions, nothing helped. Finally I found the solution. In my IIS server, under the application pool advance option, there is an option for "Enable 32-Bit Applications" - that was changed from false to true and after restarting IIS server, My program started generating pdf files.