35

我用.net4.0在vs2010中创建了一个水晶报告。当我发布网站时,它会抛出错误“无法在 C++ 堆栈中打开由 JRC 引擎处理的文档”。我在服务器上发布了该网站,并尝试从客户端访问它,我确实在 app_code 中保留了 .rpt 文件,但再次遇到相同的错误。所以我创建了一个文件夹 wwwroot 并在该文件夹中保存了 asp_client 和 website 文件夹,并提供了 wwwroot 的物理路径。一切正常,除了水晶报告。在.cs文件中代码如下:

    ReportDocument rptDoc = new ReportDocument();
    DataSetForCrystalReport ds = new DataSetForCrystalReport();
    DataSetForCrystalReport dsHeader = new DataSetForCrystalReport();
    DataTable dt = new DataTable();
    DataTable dtHeader = new DataTable();
    dt.TableName = "dtBill";
    string ReceiptNo = Request.QueryString["ReceiptNo"];
    dt = getAllOrders(ReceiptNo).Tables[0];
    dtHeader = TblcompanysettingsService.GetOrganizationDetails();
    ds.Tables[1].Merge(dt);
    ds.Tables[2].Merge(dtHeader);
    rptDoc.Load(Server.MapPath("crBill.rpt"));
    rptDoc.SetDataSource(ds);
    CrystalReportViewer1.ReportSource = rptDoc;

错误堆栈跟踪:

[COMException (0x80041811): Unsupported Operation. A document processed by the JRC engine cannot be opened in the C++ stack.]
   CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) +0
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) +147
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +422

[CrystalReportsException: Load report failed.]
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +549
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) +1613
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) +189
   GenerateBill.Page_Load(Object sender, EventArgs e) in e:\ShareFolder\Movie\wwwroot\Website\GenerateBill.aspx.cs:33
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064
4

13 回答 13

55

检查 .rpt 文件的路径!错误描述与其真正原因无关。它只是找不到您的 .rpt 文件!

在我的情况下,路径必须是位于 Reports 子文件夹中的 .rpt 文件:

Server.MapPath("~/Reports/InvoiceRegular.rpt");

为我工作。

于 2013-06-13T18:38:12.970 回答
30

这对我有用

  1. 右键单击 Rpt 文件。
  2. 选择属性
  3. 改变了

    一个。将动作构建为“内容”

    湾。复制到输出目录为“不复制”

    C。为自定义工具和自定义工具命名空间留空

于 2012-07-10T17:07:35.887 回答
6

只需执行这些步骤

(1) 右键单击​​您的“.rpt”文件选择“属性

1.a) 将动作构建为“内容

1.b)复制到输出目录为“始终复制

(2)检查.rpt文件的路径 Server.MapPath("Your path");

例如:Server.MapPath("~/Reports/MyReport.rpt");

注意:如果带有报表查看器的 rpt 和 aspx 页面都在同一个文件夹中,则无需提供完整路径,您可以在 Server.MapPath 中仅提供 filename.rpt 。

于 2013-12-13T06:39:42.297 回答
4

我不知道这是否对其他人有帮助,但我遇到了这个问题,结果证明这是一个如此简单的解决方法。我打错了 .rpt 文件的文件名...文件名中的两个单词之间有一个空格(我通常不会因为这个原因而这样做)但是当我在代码中包含该名称时,我已经离开了空格出去。更正了文件名,问题消失了。

于 2012-09-07T15:23:49.267 回答
3

找到了解决方案,我首先使用带有自己的水晶报告的 Visual Studio 2005,然后我使用从 SAP 下载的单独水晶报告升级到 VS2010。我从 SAP 研究并发现:

由于每个版本的 Crystal Reports 都有自己的特定运行时必须正确部署,因此部署的运行时必须与项目中引用的 Visual Studio .NET 的 Crystal Reports 程序集一致。

所以我卸载了以前的版本并且只使用了一个版本并且它有效。:) 感谢 ta.speot.is 的关心。这从来都不是编码问题。

于 2012-06-01T07:54:34.423 回答
3

只需将 .rpt 文件(crystl 报告模板)从本地计算机复制到特定服务器/计算机的文件夹,我确信您可以运行解决问题 CrystalDecisions.Shared.CrystalReportsException:加载报告失败。

对我来说,它运行良好,服务器端没有错误。我的应用程序能够根据代码存储 pdf 文件以共享路径。

于 2019-04-30T14:40:21.653 回答
2

我发现了另一组情况,在这些情况下会出现这个相当无益的错误。

如果您在 Visual Studio 中按 F5 运行/调试您的 Web 应用程序但仍然在 Crystal Reports (2011) 中打开报表,您将收到错误消息。

今天把我逼疯了大约一个小时!

于 2013-10-25T14:13:19.317 回答
2

为我工作:从本地计算机复制 .rpt 文件覆盖主机上的 .rpt 文件,然后它运行良好。

于 2018-09-03T03:18:46.200 回答
1

这只是发生在我身上,经过数小时的头痛后,我发现这是一个文件权限问题。由于某种原因,当从我们的 CR 开发服务器复制到共享的自定义 .rpt 目录时,文件的权限都被提升了,我不得不将几个用户组的权限添加回文件。

于 2015-08-01T03:56:00.627 回答
1

将文件夹 (aspnet_client) 从 (C:\inetpub\wwwroot) 复制并粘贴到网站文件夹,并确保 .rpt 文件位于同一文件夹中

于 2016-03-06T11:41:26.577 回答
1

确保文件路径正确,如提到的@serop。我还注意到报告文件夹不会在哪里发布。所以不得不手动发布报表文件夹。

于 2016-12-22T15:07:50.983 回答
1

我对 ASP.NET 也有同样的问题。请检查您的报告路径。那将是错误的道路。

于 2020-09-09T07:08:20.247 回答
0

请检查您的.rpt文件是否存在。如果没有,请从本地复制到托管文件夹,它将开始工作。

于 2016-04-28T06:47:37.607 回答