【问题标题】:Crystal Report is not opening for 64 bit machinesCrystal Report 无法为 64 位机器打开
【发布时间】:2017-11-02 05:08:03
【问题描述】:

我的报告在 32 位计算机上运行良好,但无法在 64 位计算机上打开。需要 64 位,因为在其中一个屏幕上加载数据会导致内存问题 - 所以它不能在 32 位上工作。

  1. Windows 10 64 位
  2. 已安装 Crystal Reports 已尝试安装 13.0.20(最新)并重新启动 PC,但没有成功。
  3. Application Target Framework 4.6.2(我什至在 4.0 上试过,但同样的错误)
  4. 使用 Visual Studio 2017 社区(VS 2015 试用)
  5. 平台 x64(不是 AnyCPU)
  6. 正在通过传递 DataTable 生成报告,没有活动 报告中的连接或 ConnectionString
  7. 错误信息

编辑#1

  1. Web.config 包括useLegacyV2RuntimeActivationPolicy="true"
  2. x86 和 x64 中的数据表相同

编辑#2

显示报表的源代码是

CrystalDecisions.CrystalReports.Engine.ReportClass c = new 
    CrystalDecisions.CrystalReports.Engine.ReportClass();

c.FileName = System.IO.Path.Combine(Root_Path, 
    "Reports", "Prod", mFileName);

c.Load();
c.SetDataSource(dt);  // dt => DataTable
c.SetParameterValue("prmSystemDate", Current_Date);

frmReportViewer v = new frmReportViewer();
v.ReportClass = c;
v.Show();

而frmReportViewer FormLoad是

private void frmReportViewer_Load(object sender, EventArgs e)
        {
            CRViewer.ReportSource =  ReportClass;
            //CRViewer => 
            //CrystalDecisions.Windows.Forms.CrystalReportViewer
        }

我是不是哪里出错了?

编辑#3

x86 和 x64 上的 DataTable 是相同的。 (将数据表保存在xml中,两个文件完全相同)。

进程监视器显示我的程序对以下文件执行CreateFile 操作

C:\WINDOWS\Microsoft.Net\assembly\GAC_64\CrystalDecisions.Web\v4.0_13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\CrystalDecisions.Web\v4.0_13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll C:\WINDOWS\Microsoft.Net\assembly\GAC\CrystalDecisions.Web\v4.0_13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll C:\WINDOWS\assembly\GAC_64\CrystalDecisions.Web\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll

所有失败,PATH NOT FOUND 结果。它成功了

C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Web\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll

然后两个BUFFER OVERFLOW 出现在同一个文件上。

它只发生在 x64 上。 x86上没有与CrystalDecisions.Web.dll相关的操作。

它表示什么?

【问题讨论】:

  • @Alejandro-2988924 配置中的引用设置已经存在。
  • 它是否在 32 位中工作(内存问题)?您的数据集中是否有一些非标准列(如 blob)?
  • @reckface 是的,它在 32 位上工作,我可以看到报告。没有非标准列,只有日期、字符串、数字
  • 对于它的价值(从 SP 20 开始)SAP 还不支持 VS 2017。他们说有些事情可能会奏效,比如打开一个现有项目。你在 VS 2015 中试过吗?

标签: c# crystal-reports 64-bit desktop-application .net-4.6.2


【解决方案1】:

这可能不是一个完整的“答案”,因为您仍在进行故障排除并寻求帮助,但评论太长了。值得注意的是,此时 SAP 不支持 VS 2017,并且有可能与此有关,但我什至在 VS 2010 中也看到过类似的消息,所以这里......

简短的猜测将其添加到您的 app.config 文件中:

<startup useLegacyV2RuntimeActivationPolicy="true"></startup>

或更具体地针对 .NET,例如:

<startup useLegacyV2RuntimeActivationPolicy="true">
 <supportedRuntime version="v4.0"/>
</startup>

更长的故障排除思考过程。错误消息通常表明 DataSet(在本例中为 DataTable)在报表对象中使用时未设置。您可以在此处放置一个断点,看看是否为真(使用 SetDataSource 的地方)。

这可能是我在这里错了,即使在那个时候也有一个正确设置的 DataSet,并且问题在查看器中稍后发生。我很久以前就遇到过这样的问题,如果没有记错的话,这就是我寻找解决方案的途径。

基本上我的问题是 EXE 在查看器中使用 ADO 对象的方式。在不了解您的项目的所有信息的情况下,我将开始沿着这条路径进行调试。

其他问题是它在 VS 2015 中是否有效?它曾经在 X64 中工作过并停止工作吗?它是否适用于其他操作,例如您可以以编程方式访问报表对象,并且它只是在查看器中出错?

【讨论】:

  • 配置设置已经存在。它从未在 x64 上工作过。源代码中也不例外。我正在使用ReportClass,所以它一直运行到最后。该错误仅出现在查看器上。
  • 所以您正在逐步检查并看到您的数据集中有数据,然后才使用它?或者您只是在查看器尝试打开报表之前没有得到异常?如果在运行时 DataSet 中没有数据或奇怪的数据,那么我会查看连接本身。您使用的是 ODBC 还是原生的?
  • Report中没有连接设置,只取DataTable中的数据。
  • 但是您从连接中获取数据...因此在运行时您的 x64 中的 DataTable 或 DataSet 可能为 null、NOTHING、空或格式奇怪。这就是为什么我建议在使用 DataTable 的确切点放置一个断点,例如 SetDataSource 调用。然后单击 VisualStudio 中的放大镜并检查 DataTable。 x86 和 x64 有区别吗?
  • x86和x64中的DataTables是一样的,在问题中添加了截图
【解决方案2】:

安装 32 位版本的 Crystal Reports,即使您的计算机是 64 位的。

我的机器也是64位的,但是我用的是32位版本的软件,效果很好。

【讨论】:

  • 也安装了 32 位版本,但同样的错误。请参阅更新后的“已安装 Crystal Reports”屏幕截图。
  • 感谢您的努力,但提到的问题是关于 PeopleSoft 驱动程序的位数,建议使用 32 位版本的 Crystal Reports Runtime 并使用平台目标 x86 构建应用程序。同时,我需要使用 x64。
【解决方案3】:

确保您安装了最新的 SP。我目前正在使用 SP19,这不会给我带来任何麻烦。
我知道找到正确的下载链接可能会很痛苦,这可能会对您有所帮助: https://wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

因为我创建了一个使用 CrystalReports 提供的查看器的 WPF 应用程序,所以我还必须在我的 App.config 中使用以下设置

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>

【讨论】:

  • 同样的错误。已安装 CR 13.0.20.2399 64 位,配置设置已作为 sku=".NETFramework,Version=v4.0" 存在,因为已更改为 .Net 4.0。
  • 配置中的重要部分是useLegacyV2RuntimeActivationPolicy="true"
【解决方案4】:

我不知道这对你是否有用。但是当我遇到服务器 2012 问题时,我遇到了以下解决方案。

Framework 4.6 使 Crystal Reports for Visual Studio 为 IIS 和 IISExpress DEV 中的 Crystalreportsviewer13 文件夹创建唯一的文件夹路径。

环境

Crystal Reports for Visual Studio 
Windows 7
Windows 8.x
Windows 2012 Server
Windows 2016
Windows 10 

重现问题

我们知道这样的问题。实际上它与.Net Framework 4.6有关,不仅限于Win10或Windows Server 2016预览版(这些操作系统默认安装.Net 4.6)。如果你在 Win7 上安装 .Net 4.6 会有同样的问题。根本原因是MS通过windows update提供了.Net Framework 4.6的更新,那么.Net 4.6的小版本就会改变。对于 ASP.NET 网站目标为 .Net 4.6 应用程序池,CR 查看器将尝试从 ..\aspnet_client\system_web\4_6_xx\crystalreportviewers13\ 查找查看器资源文件(js 和图标),突出显示的 xx 是 .网络框架 4.6。在 Win10 RTM 上是 4_6_79;在 Win7+.Net 4.6 上是 4_6_81,如果用户安装了最新的 KB3098786,它将是 4_6_118……如果下一次 .Net Framework 4.6 的 KB 更新,版本号将再次更改。所以请为它创建一个 BOSAP 案例。至少在 SP16 中,我们需要添加更多的符号链接来支持不同的 .Net Framework 4.6 小版本。而更好的解决方案是改变查看器资源文件加载的路径,例如指向IIS下的虚拟文件夹。在查看器端需要修复,需要更多时间,我们将尝试在 SP16 中实现它......谢谢,苏打

分辨率

我们的开发人员已经意识到这个问题,我们应该能够在 Service Pack 16 中提供修复

该问题与 .Net Framework 4.6 有关。

根本原因是 MS 通过 Windows Update 提供了 .Net Framework 4.6 的更新

ASP.NET 网站将针对 .Net 4.6 应用程序池,CR 查看器将尝试从中查找查看器资源文件(js 和图标)

..\aspnet_client\system_web\4_6_xx\crystalreportviewers13\

xx是.Net Framework 4.6的小版本。

For example on Win10 RTM, it is 4_6_79;
on Win7+.Net 4.6 it is 4_6_81,
if user installed recent KB3098786 it will be 4_6_118x. 

安装 .Net Framework 4.6 的下一个 KB 更新时,版本号将再次更改。

当前的解决方法是更新 Web.Config 文件以包含框架的更新版本

然后将\CrystalReportsViewer13文件夹复制到新路径:

..\aspnet_client\system_web\4_6_xx\crystalreportviewers13\

有关更新和最新下载,请访问此链接:

http://scn.sap.com/docs/DOC-7824

主页是:

http://scn.sap.com/community/crystal-reports-for-visual-studio

【讨论】:

  • 它是一个桌面应用程序。
【解决方案5】:

您的 Crystal Report DataSource 中是否有任何 32 位的数据源或连接(例如 odbc\dao)?奇怪的是你已经安装了 32 位和 64 位的 CR 运行时,为什么还要安装 Visual Studio 的 CR 版本?我遇到了和你类似的问题,但是用 DataSet 替换了 32 位 MDB 和 DAO 后,一切都变得很好。我安装了 32 位和 64 位 CR 运行时。

【讨论】:

  • 所有报表断开连接,我从程序中打开数据表并将其设置为报表的数据源。
  • 不确定“断开连接”是否足够。也许用一个水晶报表文件和你的数据表源创建一个简单的全新项目,然后再试一次。如果不起作用,请尝试其他 DataSet - 通过右键单击 CR 报告并将 DataSet 添加为源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多