我有一个使用ClickOnce为超过500个用户部署的WPF计费解决方案,CrystaReports2010用于报告,85%的用户在他们的计算机上安装了WindowsXP :(
Crystal Reports在WindowsXP计算机上工作正常,直到用户使用Crystal Reports Viewer中的内置导出按钮导出报表,如果他这样做导出过程成功完成但他无法打开任何其他在解决方案中报告,直到他重新启动应用程序。
在导出后尝试打开新报告时出现错误:
我将解决方案中的报告保存为应用程序.exe文件之外的内容外部资源,并按需加载它们,如下所示:
var report = new ReportDocument();
report.Load(@"Reports\MyReport.rpt");
我确保在用户关闭报告后关闭并处理报告文档对象,因此没有内存泄漏或超过最大打开报告数。
如果我更改了我的实现,以便将报告保存在我的解决方案中作为嵌入式资源,问题就解决了,但这不是一个选项,因为报告的大小相对较大(200KB-450KB),它将是一个每当我们发布对任何报告有任何更改的新版本时,将通过ClickOnce下载到客户端的大DLL文件!另一种变化是将每个让四个报告分组到一个DLL中,并且仍然存在相同的问题(1MB-2MB仍然是一大块)。知道我们有很多报告,并且我们会根据客户政策的变化频繁更改这些报告。请帮助!
答案 0 :(得分:1)
要解决此问题,您必须将客户端计算机上已安装的.net版本从客户端配置文件更改为完整的.net版本。
答案 1 :(得分:1)
您是否在完成报告文件后关闭并处理它们?
答案 2 :(得分:1)
最后,我找到了解决方案:) 问题是当您使用Crystal Reports查看器提供的默认导出按钮导出Crystal Report时,导出按钮会将应用程序的当前工作目录更改为导出位置! (奇怪的行为!!)这就是为什么下面的行不再适用了:
report.Load(@"Reports\MyReport.rpt");
所以我将此行更改为以下内容:
report.Load(AppDomain.CurrentDomain.BaseDirectory + "\\" + @"Reports\MyReport.rpt");
它就像魔法一样工作:)