我的报告在 32 位机器上运行良好,但无法在 64 位机器上打开。需要 64 位,因为在其中一个屏幕上加载数据会导致内存问题 - 因此它无法在 32 位上运行。
- Windows 10 64 位
- 已安装 Crystal Reports 已尝试安装 13.0.20(最新)并重新启动 PC,但没有成功。
- Application Target Framework 4.6.2(我什至在 4.0 上试过但同样的错误)
- 使用 Visual Studio 2017 Community(试用 VS 2015)
- 平台 x64(非 AnyCPU)
- 正在通过传递 DataTable 生成报告,没有事件 报告中的连接或连接字符串
- 错误信息
编辑#1
编辑#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/