Crystal Reports 2010 Все отчеты не загружаются после экспорта отчета в любой формат в WindowsXP
Вопрос
У меня есть решение для выставления счетов WPF, которое развертывается с использованием Clickonce для более чем 500 пользователей, для отчетности использовались Crystareports2010, 85% пользователей устанавливают WindowsXP на своих машинах :(
Crystal Reports работает просто отлично на машинах WindowsXP, пока пользователь не экспортирует отчет со встроенной кнопкой экспорта в зрителе Crystal Reports, если он сделал этот процесс экспорта успешно, но он не может открыть какой-либо другой отчет в Решение, пока он не перезапустит приложение.
Это ошибка при попытке открыть новый отчет после экспорта:
Я сохраняю отчеты в своем решении как внешние ресурсы контента вне файла приложения .exe, и я загружаю их по требованию, что -то вроде этого:
var report = new ReportDocument();
report.Load(@"Reports\MyReport.rpt");
Я позаботился о том, чтобы после того, как пользователь закрыл отчет, чтобы закрыть и утилизировать объект документа отчета, поэтому нет утечек памяти или превышать максимальное количество открытых отчетов.
Если я изменил свою реализацию, чтобы я сохранил отчеты внутри своего решения в качестве встроенных ресурсов, проблема решается, но это не вариант, потому что отчеты относительно большие по размеру (200 КБ-450 КБ), это будет большой файл DLL Это будет загружено клиентам через Clickonce всякий раз, когда мы выпускаем новую версию, которая имеет какое -либо изменение в любом отчете!. Другой вариант заключается в том, чтобы сгруппировать каждый, скажем, четыре отчета в один DLL, и все же та же проблема (1 МБ-2 МБ все еще большой кусок). Зная, что у нас есть много отчетов, и мы получаем частые запросы на изменения этих отчетов в соответствии с изменениями в политике нашего клиента. Пожалуйста помоги!
Решение 3
Наконец, я нашел решение :) Проблема заключалась в том, что когда вы экспортируете кристаллический отчет с кнопкой экспорта по умолчанию, предоставленной зрителем Crystal Reports, кнопка экспорта меняет текущий рабочий каталог приложения в место экспорта !!! (странное поведение !!) И именно поэтому следующая строка больше не работает:
report.Load(@"Reports\MyReport.rpt");
Итак, я изменил эту строку на следующее:
report.Load(AppDomain.CurrentDomain.BaseDirectory + "\\" + @"Reports\MyReport.rpt");
И это сработало так же, как волшебство :)
Другие советы
Чтобы решить эту проблему, вы должны изменить установленную версию .NET на клиентской машине с профиля клиента на полную версию .NET.
Вы закрываете и утилизируете свои документы отчетов, как только закончите с ними?