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

Crystal Reports在WindowsXP计算机上工作正常,直到用户在Crystal Reports查看器中使用内置导出按钮导出报告,如果他这样做的话,导出过程成功完成,但他无法在该报告中打开任何其他报告解决直到他重新启动应用程序。

Export Button

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

The Error Message

我将报告中的报告保存在应用程序.exe文件之外的内容外部资源中,然后按需加载它们,类似的内容:

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

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

如果我更改了实施方式,以便将报告保存在解决方案中作为嵌入式资源,则解决了问题,但这不是一个选择,因为报告的大小相对较大(200KB-450KB),这将是一个很大的DLL文件每当我们发布一个对任何报告都有任何更改的新版本!另一个变体是每个人都将四个报告分组为一个DLL,并且仍然存在相同的问题(1MB-2MB仍然是一个很大的块)。知道我们有很多报告,并且根据客户政策的更改,我们会经常对这些报告进行更改请求。请帮忙!

有帮助吗?

解决方案 3

最后,我找到了解决方案:)问题是,当您用Crystal Reports Viewer提供的默认导出按钮导出Crystal报告时,“导出”按钮将应用程序的当前工作目录更改为导出位置!!! (奇怪的行为!!)这就是为什么以下行不再起作用的原因:

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

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

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

它像魔术一样工作:)

其他提示

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

完成报告后,您是否关闭并处置了报告文件?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top