1

我有一个使用 ClickOnce 为 500 多个用户部署的 WPF 计费解决方案,CrystaReports2010 用于报告,85% 的用户在他们的机器上安装了 WindowsXP :(

Crystal Reports 在 WindowsXP 机器上运行良好,直到用户使用 Crystal Reports 查看器中的内置导出按钮导出报表,如果他这样做,则导出过程成功完成,但他无法在解决方案,直到他重新启动应用程序。

导出按钮

这是导出后尝试打开新报告时的错误:

错误信息

我将解决方案中的报告保存为应用程序 .exe 文件之外的内容外部资源,并按需加载它们,如下所示:

var report = new ReportDocument();
report.Load(@"Reports\MyReport.rpt");

我确保在用户关闭报表后关闭并处理报表文档对象,因此没有内存泄漏或超过打开报表的最大数量。

如果我改变了我的实现,将我的解决方案中的报告保存为嵌入式资源,问题就解决了,但这不是一个选项,因为报告的大小相对较大(200KB-450KB),它将是一个很大的 DLL 文件每当我们发布对任何报告有任何更改的新版本时,都将通过 ClickOnce 将其下载给客户!另一种变体是将每个报告分组到一个 DLL 中,比如说四个报告,但仍然存在相同的问题(1MB-2MB 仍然是一大块)。知道我们有很多报告,并且根据客户政策的变化,我们经常收到对这些报告的更改请求。请帮忙!

4

3 回答 3

1

要解决此问题,您必须将客户端计算机上安装的 .net 版本从客户端配置文件更改为完整的 .net 版本。

于 2012-01-17T11:37:23.933 回答
1

您是否在完成报告文件后关闭并处理它们?

于 2012-04-18T19:36:34.267 回答
1

最后,我找到了解决办法:) 问题是当你使用 Crystal Reports 查看器提供的默认导出按钮导出 Crystal Report 时,导出按钮会将应用程序的当前工作目录更改为导出位置!!!(奇怪的行为!!)这就是为什么以下行不再起作用的原因:

report.Load(@"Reports\MyReport.rpt");

所以我将此行更改为以下内容:

report.Load(AppDomain.CurrentDomain.BaseDirectory + "\\" + @"Reports\MyReport.rpt");

它就像魔术一样工作:)

于 2012-04-24T13:24:12.977 回答