BadImageFormatException のトラブルシューティング 質問する

BadImageFormatException のトラブルシューティング 質問する

Visual Studio 2010 を使用して C# で記述し、完全な .NET Framework 4 をターゲットとする Windows サービスがあります。デバッグ ビルドから実行すると、サービスは期待どおりに実行されます。ただし、リリース ビルドから実行すると、System.BadImageFormatException が発生します (詳細は下記を参照)。インターネットで解決策を検索しましたが、これまでのところ、見つけたものはすべて解決策を見つけるのに役立ちませんでした。

この問題は、Windows 7 64 ビット (開発) システムと Windows XP SP3 32 ビット (ターゲット) システムの両方で発生します。

これまで試したことは次のとおりです。

  • プラットフォーム ターゲットなどの検証済みのビルド設定はすべて同じ (x86) です。
  • /verbose オプションを指定した peverify を使用して、アセンブリ バイナリが有効であることを確認しました。
  • fuslogvw を使用して、読み込みの問題を検索します。
  • CheckAsm を使用して、不足しているファイルまたはアセンブリを検索しました。

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

System.BadImageFormatException が処理されませんでした
  メッセージ = ファイルまたはアセンブリ 'XxxDevices、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null' またはその依存関係の 1 つを読み込めませんでした。 不正な形式のプログラムを読み込もうとしました。
  ソース=XxxDevicesService
  ファイル名=XxxDevices、バージョン=1.0.0.0、カルチャ=中立、PublicKeyToken=null
  FusionLog=アセンブリ マネージャーは次の場所からロードされました: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
実行可能ファイル c:\Dev\TeamE\bin\Release\XxxDevicesService.vshost.exe で実行中
--- 詳細なエラー ログが続きます。

=== 事前バインド状態情報 ===
ログ: ユーザー = XXX
ログ: DisplayName = XxxDevices、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null
 (完全指定)
ログ: Appbase = file:///c:/Dev/TeamE/bin/Release/
ログ: 初期 PrivatePath = NULL
呼び出しアセンブリ: XxxDevicesService、バージョン=1.0.0.0、カルチャ=中立、PublicKeyToken=null。
===
ログ: このバインドはデフォルトのロード コンテキストで開始されます。
ログ: アプリケーション構成ファイルを使用しています: c:\TeamE\bin\Release\XxxDevicesService.vshost.exe.Config
ログ: ホスト構成ファイルを使用:
ログ: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config のマシン構成ファイルを使用しています。
ログ: 現時点では、ポリシーは参照に適用されていません (プライベート、カスタム、部分的、または場所ベースのアセンブリ バインド)。
ログ: 新しい URL ファイル:///c:/TeamE/bin/Release/XxxDevices.DLL のダウンロードを試行しています。
ERR: アセンブリのセットアップを完了できませんでした (hr = 0x8007000b)。プローブは終了しました。

  スタックトレース:
       XxxDevicesService.Program.Main(String[] args) で
       System.AppDomain._nExecuteAssembly(RuntimeAssembly アセンブリ、String[] 引数)
       Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() で
       System.Threading.ExecutionContext.Run(ExecutionContext 実行コンテキスト、ContextCallback コールバック、オブジェクト状態、ブール値 ignoreSyncCtx)
       System.Threading.ExecutionContext.Run(ExecutionContext 実行コンテキスト、ContextCallback コールバック、オブジェクトの状態)
       System.Threading.ThreadHelper.ThreadStart() で
  内部例外:

ベストアンサー1

プラットフォーム ターゲットなどの検証済みのビルド設定はすべて同じ (x86) です。

クラッシュログにはそうは書かれていません:

アセンブリ マネージャーは次の場所から読み込まれました: C:\Windows\Microsoft.NET\Framework64

注意してください64名前に「」が付いているものは、64ビット版のフレームワークの本拠地です。ターゲットプラットフォーム設定をEXEプロジェクトであり、クラス ライブラリ プロジェクトではありません。XxxDevicesService EXE プロジェクトによって、プロセスのビット数が決まります。

おすすめ記事