'CrystalDecisions.CrystalReports.Engine.ReportDocument'的类型初始值设定项引发异常

时间:2013-05-20 20:57:33

标签: c# .net deployment installshield crystal-reports-2010

我正在向使用Crystal Reports API显示和打印表单的客户端部署桌面应用程序。我正在使用InstallShield 2012构建我的安装程序。我还包括.NET 4.0 Framework以及所有Crystal程序集。我有2个(有点相关)问题:

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

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

我不知道我忘记了什么。正确地在GAC中注册CrystalDecisions.CrystalReports.Engine dll,以及大约10个其他Crystal程序集。

2)I have asked this question on the SAP forums,我被告知需要将.NET 2.0 Framework与.NET 4.0 Framework一起包含在内。我尝试在我的安装程序包中包含.NET 2.0可再发行组件,但安装程序不会安装它。安装程序是否看到我安装了4.0,因此它会跳过2.0安装?

18 个答案:

答案 0 :(得分:15)

这对我有用:

如果要在64位计算机上安装,请确保“构建”选项卡下的应用程序属性具有“任何CPU”作为平台目标,如果您有选项,请取消选中“首选32位”复选框。 Crystal对于32/64位程序集非常敏感,并且做了一些非常违反直觉的假设,这些假设很难排除故障。

答案 1 :(得分:11)

当静态构造函数抛出异常时,它将被包装在TypeInitializationException内。您需要检查异常对象的InnerException属性以查看实际异常。

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

  1. 跟踪/记录异常及其InnerException(递归):向AppDomain.UnhandledException事件添加事件处理程序,并将记录/跟踪代码放在那里。使用System.Diagnostics.Debug.WriteLine进行跟踪,或使用记录器(log4net,ETW)。 DbgView(一个Sysinternals工具)可用于查看Debug.WriteLine跟踪。
  2. 使用生产调试程序(例如WinDbg或NTSD)来诊断异常。
  3. 使用Visual Studio的远程调试来诊断异常(使您能够从自己的开发计算机调试目标计算机上的代码)。

答案 2 :(得分:7)

我有类似的信息,经过几次在线搜索并做了所有建议后,没有任何帮助。最后我找到了解决方案。在我的IIS服务器中,在“应用程序池高级”选项下,有一个“启用32位应用程序”选项 - 从false更改为true,重新启动IIS服务器后,我的程序开始生成pdf文件。

答案 3 :(得分:5)

检查项目的属性是否为平台目标。安装相应版本的Crystal Reports:

To x86 > CRforVS_redist_install_32bit
To x64 > CRforVS_redist_install_64bit

答案 4 :(得分:3)

bug的内部异常是无法加载文件或程序集'log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 692fbea5521e1304'

更改启用32位应用的AppPool设置错误解决了问题

答案 5 :(得分:2)

我在网上搜索了一整天,我自己找到了一个解决方案。 同样的情况,应用程序在开发人员计算机中运行良好,但在部署时它会抛出异常 “crystaldecisions.crystalreports.engine.reportdocument引发异常” 详细信息:缺少sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer版本13.0.2000

我的IDE:MS VS 2010 Ultimate,CR V13.0.10

解决方案:

  1. 我为我的应用程序设置了x86,然后我为我的设置应用程序设置了x64

  2. 先决条件:我在以下目录中放置了支持CR运行时文件CRRuntime_32bit_13_0_10.msi,CRRuntime_64bit_13_0_10.msi C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper \ Packages \ .NET Framework 4.0的Crystal Reports

  3. 将合并模块文件包含到安装项目中。这里的版本并不严肃,因为我使用13.0.10软件,13.0.16合并模块文件 我包含的文件:CRRuntime_13_0_16.msm 此文件位于已设置的msm文件中。

  4. 安装此Merge模块时,将在以下目录中添加必要的dll C:\ Program Files(x86)\ SAP BusinessObjects \ Crystal Reports for .NET Framework 4.0 \ Common \ SAP BusinessObjects Enterprise XI 4.0 \ win32_x86 \ dotnet

    dll文件版本不会导致任何问题。

    在您的开发者计算机中,您确认相同。

    我需要声望点,如果这个答案有用,请将其标记为有用(+1)

答案 6 :(得分:1)

正如“M.A. Hanin”所述,它可能由InnerException这样引起:

"Unrecognized configuration section userSettings. (C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g\1.0.0.0\user.config line 3)"

我从我的电脑中删除了文件夹:C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g,这对我有用!

答案 7 :(得分:1)

我最近遇到了类似的错误:log4net错误:

  

无法加载文件或程序集'log4net,Version = 1.2.10.0,   Culture = neutral,PublicKeyToken = 692fbea5521e1304'

这是在64位机器上,但我只安装了32bit运行时。

确保构建仅针对x86定位。

答案 8 :(得分:0)

我遇到了问题类型初始化程序..我的配置文件解决了它..

我忘记了这样的连接元素 “的ConnectionStrings”  “/的ConnectionStrings” 也许这取决于你在代码中做了什么。我的错误是因为这个连接元素而无法打开一个类。

答案 9 :(得分:0)

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument 抛出异常

我将目标平台从x86更改为Any CPU并解决了问题。

答案 10 :(得分:0)

我没有在32位计算机上收到错误但是在64位计算机上,所以我将目标平台从x86更改为任意CPU,它解决了问题。

答案 11 :(得分:0)

  1. 下载cr redist 2005或2008(这是您的工具)或从C:\ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \ CrystalReports

  2. 下载c ++ redist 2005或2008(这是您的工具)

  3. 安装并重新启动系统

  4. 问题解决了。

答案 12 :(得分:0)

这是因为缺乏能力......如果你看到内部异常,你会看到这条消息

"Access is denied.
Access to speech functionality requires ID_CAP_SPEECH_RECOGNITION to be defined in the manifest."

所以摆脱这个例外。从Manifest文件中打开语音识别功能。

我有同样的问题,它解决了我的问题。 :)

答案 13 :(得分:0)

对我来说,诀窍是将目标机器从“任何CPU”更改为“x64”,或者在您的情况下“x86”,具体取决于您的目标机器的架构。在进入一个表明更复杂问题的更复杂的解决方案之前,我会首先尝试这个。

答案 14 :(得分:0)

如果您使用的是visual studio,请启用构建属性“首选32位”。 见下图。

enter image description here

答案 15 :(得分:0)

我遇到了同样的问题,并且安装了Crystal Report Runtime 32和64位版本,都解决了该问题

答案 16 :(得分:0)

项目属性->编译->目标CPU->任何CPU 然后取消选中“首选32位”

完成

答案 17 :(得分:-2)

我遇到了同样的问题。在我的情况下,目标平台是Any CPU。但是复选框" Prefer-32Bit"被检查..取消选中同样解决了问题。