「BadILrange」というメッセージで例外が発生する具体的な原因は何ですか?
このメッセージで私の顧客からエラーレポートを受け取りましたが、例外の種類がわかりません。このテキストをグーグルで検索すると、結果が大きく異なります。これは、.NET / C#ではかなり低レベルであり、さまざまな状況で発生する可能性があります。この文脈では、ILは「中間言語」であると思います。
では、この例外の正確な原因と、それが発生する一般的な根本的な理由は何でしょうか。
例外タイプはBadImageFormatException
、アセンブリが破損したときにスローされます(完全な例外メッセージでどのアセンブリを説明する必要があります)。これが発生する理由はさまざまです。ウイルス、ハードウェア障害、ソフトウェアバグ、またはユーザーによる誤ったアクションなどです。例外メッセージとFusionlogプロパティには、それが表すエラーの種類に関する詳細情報が含まれます。
問題が解決しない場合は、アプリケーションまたは.NET Frameworkを再インストールする必要があります。一度だけ発生した場合は、ウイルスをチェックするか、本格的なハードウェアテストを行う必要があります。
ランタイムは、ロードされたアセンブリを検証し、具体的には、提供されたCILの有効性をチェックします。CIL構造とCILストリームのさまざまな問題を検出します。
この特定の問題を自分で見たことはありませんが、これの最も一般的な理由は、アプリケーションまたは.NETアセンブリの1つが物理的に破損していることだと思います。
アプリケーション(および/または.NETランタイム)を再インストールしようとします。
私の問題は、危険な作業ディレクトリでした。したがって、そのどこかに悪いDLLがあり、おそらくnuget参照です。すべてのnugetパッケージの更新が機能せず、ソリューションの再構築が機能せず、PCの再起動が機能しませんでした。
ソース管理(svn)から新しい作業ディレクトリに新しいチェックアウトを実行すると、問題が解決しました。
私はWin10を使用しているので、ここでさらに深い問題が発生する可能性がありますが、それ以降数日間は問題が発生していません。
私の場合、このエラーは、次のように、_FormClosingのイベントでアセンブリオブジェクトを破棄したために発生しました。
if (_kishpos != null)
_kishpos.Dispose();
_FormClosing()イベントでアセンブリオブジェクトを破棄する必要はありません。
コメントするか削除して、「不正なIL範囲」エラーを修正します。
//if (_kishpos != null)
// _kishpos.Dispose();
エラーが修正されました。