Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
251 views
in Technique[技术] by (71.8m points)

c# - Crystal Report is not opening for 64 bit machines

My reports work fine on a 32 bit machine but won't open on 64 bit. 64 bit is required because loading data on one of the screen causes a memory issue - so it can't work on 32 bit.

  1. Windows 10 64 bit
  2. Installed Crystal Reports Tried installing 13.0.20(latest) and restarting PC but didn't work.
  3. Application Target Framework 4.6.2 (i even tried it on 4.0 but same error)
  4. Using Visual Studio 2017 Community (tried VS 2015)
  5. Platform x64 (not AnyCPU)
  6. Reports are being generated by passing DataTable, no active connection or ConnectionString in reports
  7. Error Message

enter image description here

Edit # 1

  1. Web.config includes useLegacyV2RuntimeActivationPolicy="true"
  2. DataTables in x86 and x64 are sameenter image description here

Edit # 2

Source Code for showing the report is

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();

And frmReportViewer FormLoad is

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

Have I gone wrong somewhere?

Edit # 3

DataTable on x86 and x64 are same. (saved the datatables in xml and both files are exactly the same).

Process Monitor shows that my program performs CreateFile operation on following files

C:WINDOWSMicrosoft.NetassemblyGAC_64CrystalDecisions.Webv4.0_13.0.2000.0__692fbea5521e1304CrystalDecisions.Web.dll C:WINDOWSMicrosoft.NetassemblyGAC_MSILCrystalDecisions.Webv4.0_13.0.2000.0__692fbea5521e1304CrystalDecisions.Web.dll C:WINDOWSMicrosoft.NetassemblyGACCrystalDecisions.Webv4.0_13.0.2000.0__692fbea5521e1304CrystalDecisions.Web.dll C:WINDOWSassemblyGAC_64CrystalDecisions.Web13.0.2000.0__692fbea5521e1304CrystalDecisions.Web.dll

All fails with PATH NOT FOUND Result. It succeeds on

C:WindowsassemblyGAC_MSILCrystalDecisions.Web13.0.2000.0__692fbea5521e1304CrystalDecisions.Web.dll

and then two BUFFER OVERFLOW occurs on this same file.

It only happens on x64. There is no operation related with CrystalDecisions.Web.dll on x86.

What does it indicate?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This might not be an complete "answer" since you're still troubleshooting, and asking for help, but its too long for a comment. Of note, at this time SAP does not support VS 2017, and there is possibility that has something to do with this, but I've seen similar messages even back in VS 2010 so here goes...

Short guess add this to your app.config file:

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

or more specifically target .NET like:

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

Longer troubleshooting thought process. The error message usually would indicate that the DataSet (DataTable in this case) is not set at the time it is used in the report object. You could put a breakpoint there and see if this is true (where SetDataSource is used).

It might be that I am wrong here and there is a properly set DataSet even at that point, and the issue happens a little later in the viewer. I ran into issues like this a long time ago and if memory serves this was the route I took to track down a solution.

Basically my problem was the way the EXE was using ADO objects in the viewer. Without knowing everything about your project I would start down this path to debug.

Other questions would be does it work in VS 2015? Did it ever work in X64 and stop working? Does it work for other operations, like can you access the report object programatically, and it's only erring in viewer?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...