c# - Crystal Report 不支持 64 位机器

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

我的报告在 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 Community(试用 VS 2015)
  5. 平台 x64(非 AnyCPU)
  6. 正在通过传递 DataTable 生成报告,没有事件 报告中的连接或连接字符串
  7. 错误信息

enter image description here

编辑#1

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

编辑#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 中,两个文件完全相同)。

Process Monitor 显示我的程序对以下文件执行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 相关的操作。

这是什么意思?

最佳答案

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

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

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

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

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

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

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

基本上我的问题是 EXE 在查看器中使用 ADO 对象的方式。在不了解你的项目的一切的情况下,我会开始这条调试之路。

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

关于c# - Crystal Report 不支持 64 位机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44300956/

相关文章:

c++ - 视觉 C++ 2008 : Unable to set win64 as the active build configuration for project

c++ - 32 位和 64 位 Linux 机器中 4 字节类型的区别

c# - RedirectToAction 不更改 url

.net - 我的代码中出现未知数据库连接器错误

c# - 让 Monogame 内容管道与 Windows 8 中的 Visual Studio 2013 一起工作

sql-server - Crystal Reports 与 Microsoft SQL Server Reporting Services

c# - 应用程序池位于 Visual Studio 中的哪里?

c++ - x86 和 x64 堆栈帧

c# - 在不创建新实例的情况下反射(reflect)嵌套实例

c# - EnableCorsAttribute 中缺少方法