2013-05-20 156 views
19

我正在将桌面应用程序部署到使用Crystal Reports API显示和打印表单的客户端。我使用InstallShield 2012构建我的安装程序。我还包括.NET 4.0 Framework以及所有的Crystal程序集。我有2个(有点儿有关)的担忧:'CrystalDecisions.CrystalReports.Engine.ReportDocument'的类型初始值设定项引发异常

1)每当我试图运行在客户机上的应用程序,我得到以下错误:

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

我不知道我在这里忘了。 CrystalDecisions.CrystalReports.Engine dll正在GAC中正确注册,正如大约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安装?

回答

9

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

在分期/生产环境(如你没有安装Visual Studio),你需要:

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

谢谢,这让我走上了正确的道路。我已经实现了我自己的异常日志记录,但我没有正确记录InnerExceptions。 – gwin003

+0

嘿!这是因为缺乏能力....如果看到内部异常,您将看到此消息“访问被拒绝。 访问语音功能需要在清单中定义ID_CAP_SPEECH_RECOGNITION。” 所以摆脱这个例外。如上所述打开语音识别功能。 –

13

这里是我工作:

如果您在64位计算机上进行安装,确保生成选项卡下的应用程序性能有“任何CPU”作为目标平台,并取消勾选如果您有选项,则选中“首选32位”复选框。晶体是约32/64位程序集,并做出一些非常不直观的假设,这是很难排除故障。

+0

我的解决方案涉及到我没有使用Crystal所需的正确log4net程序集。我在我的应用程序中使用log4net来记录自己的异常,但Crystal想要一个具有不同PublicKeyToken的log4net版本。一旦我在我的安装程序中包含正确的版本,它就可以工作。 – gwin003

+1

我见过SAP文档明确指定将其设置为32位或64位NOT AnyCpu。 –

0

我没有收到32位机器上的错误,但在64位,所以我改变了目标平台从x86到任何CPU,它解决了这个问题。

0

为“文学硕士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并为我工作!

5

检查您的projectm的平台目标的属性。安装Crystal Reports相应版本:

To x86 > CRforVS_redist_install_32bit 
To x64 > CRforVS_redist_install_64bit 
+3

你是说应该安装该名称的应用程序?很难解析你写的东西。如果你能清除它,那会很好。 – Lizz

0

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

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

0

我有一个问题的类型初始..我的配置文件来解决吧..

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

5

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

+0

好极了!它工作正常! –

-2

我面临同样的问题。目标平台是我的情况下的任何CPU。但是复选框“Prefer-32Bit”已被选中。取消选中相同的选项可以解决问题。

2

我在网上搜索了一整天,我发现了一个解决方案。 相同的情况下,应用程序在开发人员机器正常工作,但部署时抛出异常 “crystaldecisions.crystalreports.engine.reportdocument抛出一个异常” 详细信息:sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer版本13.0.2000缺少

我的IDE:MS VS 2010旗舰版,CR V13.0.10

解决方案:

  1. 我设置的x86我的应用程序,然后我设置64我的设置应用

  2. 先决条件:我把配套CR运行时文件CRRuntime_32bit_13_0_10.msi,CRRuntime_64bit_13_0_10.msi在以下目录 C:\ Program Files文件(x86)的\微软的SDK \的Windows \ v7.0A \引导程序\软件包\水晶报表.NET Framework 4.0

  3. 将合并模块文件包含到安装项目中。这里是版本不是严重的事情,因为我使用13.0.10软件,13.0.16合并模块文件 文件我包括:CRRuntime_13_0_16.msm 此文件是设置msm文件中找到一个。

虽然安装该合并模块将在下面的目录 C增加必要的DLL:\程序文件(x86)\ SAP的BusinessObjects \水晶报表的.NET Framework 4.0 \ COMMON \ SAP BusinessObjects Enterprise的XI 4.0 \ win32_x86 \ dotnet

dll文件版本不会引起任何问题。

在您的开发人员机器中,您确认它一样。

我需要的声誉分,如果这个答案是非常有用的好心将其标记有用的(+1)

2

错误的内部异常说:无法加载文件或程序集“log4net的,版本= 1.2.10.0,文化=中性公钥= 692fbea5521e1304'

更改应用程序池设置启用32位应用程序解决问题

0
  1. 下载CR REDIST 2005或2008(这是您的工具),或从复制C:\ Program Files文件\微软的Visual Studio 8 \ SDK \ 2.0 \引导程序\软件包\水晶报表

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

  3. 同时安装并重新启动系统

  4. 问题解决了。

0

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

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

因此,要摆脱这种异常。从Manifest文件打开语音识别功能。

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

1

什么工作对我来说:

我最近有一个类似的错误与log4net的错误:

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'

这是 65bit 64位计算机上,但我只安装了32bit运行。

确保构建仅针对x86为我工作。

+2

我也想要65位机!请告诉我从哪里可以得到它? :3 – Nevermore

0

对我来说,诀窍是将目标机器从“任意CPU”更改为“x64”,或者根据您的目标机器的体系结构,您的情况可能是“x86”。在进入一个更复杂的解决方案之前,我会先尝试这个方法,这个方案表明一个更复杂的问题

相关问题