1. ホーム
  2. c#

[解決済み] BadImageFormatException のトラブルシューティング

2022-08-28 20:54:50

質問

Visual Studio 2010 を使用して C# で書かれた Windows サービスがあり、完全な .NET Framework 4 をターゲットにしています。 Debug ビルドから実行すると、サービスは期待どおりに実行されます。 しかし、Release ビルドから実行すると、System.BadImageFormatException が発生します (詳細は後述)。 解決策を求めてインターネットを検索しましたが、今のところ、私が見つけたすべてのものは解決策を見つける助けにはなりません。

この問題は、Windows 7 64 ビット (dev) と Windows XP SP3 32 ビット (target) の両方のシステム上に存在します。

以下は、これまでに私が試したことです。

  • Platform Target などのビルド設定がすべて同じ (x86) であることを確認しました。
  • peverify を /verbose オプション付きで使用し、アセンブリ バイナリが有効であることを確認しました。
  • fuslogvw を使用して、ロードの問題を探します。
  • CheckAsm を使用して、不足しているファイルまたはアセンブルを探します。

これらのチェックはすべて、何も変更しませんでした。 以下に、例外情報の全文を記載しますが、私の会社の主人の秘密を守るために、名前の一部を変更しました。

System.BadImageFormatException は処理されませんでした。
  Message=Could not load file or assembly 'XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.この例外は、ファイルまたはアセンブリをロードすることができませんでした。不正なフォーマットでプログラムをロードしようとしました。
  ソース=XxxDevicesService
  FileName=XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  FusionLog=Assembly Manager loaded from: C:\WindowsMicrosoft.NET Filter 64

どのように解決するのですか?

Platform Target などのビルド設定がすべて同じ (x86) であることを確認しました。

クラッシュログに書いてあることと違う。

Assembly Manager loaded from: C:\WindowsMicrosoft.NETFramework64

以下の点に注意してください。 64 は、64 ビット版フレームワークのホームです。 ターゲットプラットフォーム設定を EXE プロジェクトで設定します。 XxxDevicesService EXE プロジェクトは、プロセスのビット性を決定します。