1

ClickOnce を使用して 500 人以上のユーザーにデプロイされた WPF 課金ソリューションがあり、レポートには CrystaReports2010 が使用され、ユーザーの 85% のマシンに WindowsXP がインストールされています :(

Crystal Reports Viewer の組み込みのエクスポート ボタンを使用してレポートをエクスポートするまでは、Crystal Reports は WindowsXP マシンで正常に動作します。ユーザーがこれを行った場合、エクスポート プロセスは正常に完了しますが、Crystal Reports で他のレポートを開くことはできません。彼がアプリケーションを再起動するまで解決策。

エクスポートボタン

エクスポート後に新しいレポートを開こうとすると、次のエラーが表示されます。

エラーメッセージ

レポートをアプリケーションの .exe ファイル外のコンテンツ外部リソースとしてソリューションに保存し、次のようにオンデマンドで読み込みます。

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

ユーザーがレポートを閉じた後、レポート ドキュメント オブジェクトを閉じて破棄するようにしたので、メモリ リークや開いているレポートの最大数を超えないようにしました。

ソリューション内のレポートを埋め込みリソースとして保存するように実装を変更した場合、問題は解決されますが、レポートのサイズが比較的大きい (200KB ~ 450KB) ため、大きな DLL ファイルになるため、これはオプションではありません。これは、レポートに変更を加えた新しいバージョンをリリースするたびに、ClickOnce を介してクライアントにダウンロードされます! もう 1 つのバリエーションは、たとえば 4 つのレポートを 1 つの DLL にグループ化することです。それでも問題は同じです (1MB ~ 2MB は依然として大きなチャンクです)。多くのレポートがあり、クライアントのポリシーの変更に応じて、これらのレポートの変更要求が頻繁に寄せられることを知っています。助けてください!

4

3 に答える 3

1

最後に、私は解決策を見つけました:) 問題は、Crystal Reportsビューアによって提供されるデフォルトのエクスポートボタンを使用してCrystal Reportをエクスポートすると、エクスポートボタンがアプリケーションの現在の作業ディレクトリをエクスポート場所に変更することでした!!! (奇妙な動作!!) そのため、次の行はもう機能しません。

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

そこで、この行を次のように変更しました。

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

そして、それは魔法のように機能しました:)

于 2012-04-24T13:24:12.977 に答える
1

この問題を解決するには、クライアント マシンにインストールされている .net バージョンをクライアント プロファイルから完全な .net バージョンに変更する必要があります。

于 2012-01-17T11:37:23.933 に答える
1

使い終わった報告書を閉じて処分していませんか?

于 2012-04-18T19:36:34.267 に答える