1. ホーム
  2. c#

[解決済み] CrystalDecisions.CrystalReports.Engine.ReportDocument' の型イニシャライザーで例外が発生しました。

2022-02-27 01:29:26

質問

Crystal Reports API を使用してフォームを表示および印刷するデスクトップアプリケーションをクライアントに配布しています。InstallShield 2012 を使用してインストーラーを作成しています。また、.NET 4.0 Framework とすべての Crystal アセンブリを同梱しています。2 つの (少し関連した) 懸念事項があります。

1) クライアントマシンでアプリケーションを実行しようとすると、必ず次のエラーが発生します。

The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' 
      threw an exception.

ここで何を忘れているのか、さっぱりわかりません。その CrystalDecisions.CrystalReports.Engine dll は、他の約 10 個の Crystal アセンブリと同様に、正しく GAC に登録されています。

2) SAPフォーラムでこのような質問をしたことがあります。 .NET 4.0 Frameworkと一緒に.NET 2.0 Frameworkを含める必要があると言われました。インストーラパッケージに.NET 2.0 再頒布可能ファイルを含めてみましたが、インストーラはそれをインストールしません。インストーラーは、私が4.0をインストールしていることを認識し、2.0のインストールをスキップするのでしょうか?

解決方法を教えてください。

静的コンストラクタが例外をスローする場合、その例外は TypeInitializationException . 例外オブジェクトの InnerException プロパティで、実際の例外を確認することができます。

ステージング/本番環境(Visual Studioがインストールされていない環境)では、どちらか一方が必要です。

  1. 例外とその InnerException を(再帰的に)トレース/ログする。イベントハンドラを AppDomain.UnhandledException イベントを作成し、そこにロギング/トレースコードを記述してください。使用方法 System.Diagnostics.Debug.WriteLine はトレース用、またはロガー(log4net、ETW)。DbgView (a Sysinternals tool) はDebug.WriteLineのトレースを見るために使うことができます。
  2. プロダクションデバッガ(WinDbgやNTSDなど)を使って、例外を診断する。
  3. Visual Studioのリモートデバッグを使用して例外を診断する(自分の開発用コンピューターからターゲットコンピューターのコードをデバッグすることができる)。