Visual Studio 2010を使用し、完全な.NET Framework 4を対象とするC#で記述されたWindowsサービスがあります。デバッグビルドから実行すると、サービスは期待どおりに実行されます。ただし、Releaseビルドから実行すると、System.BadImageFormatExceptionが発生します(詳細は以下)。私はインターネットで解決策を探していましたが、これまでに見つけたすべてのものは解決策を見つけるのに役立ちませんでした。
この問題は、Windows 7 64ビット(dev)システムとWindows XP SP3 32ビット(ターゲット)システムの両方に存在します。
これが私がこれまでに試したことです:
- プラットフォームターゲットなどの検証済みビルド設定はすべて同じです(x86)。
- / verboseオプションを指定してpeverifyを使用し、アセンブリバイナリが有効であることを確認しました。
- ロードの問題を探すためにfuslogvwを使用します。
- CheckAsmを使用して、不足しているファイルまたはアセンブリを探しました。
これらのチェックはすべて何も変更しませんでした。以下に、例外情報の全文を含めました。一部の名前は、会社のマスターの秘密を保護するために変更されています。
System.BadImageFormatExceptionが処理されませんでした
メッセージ=ファイルまたはアセンブリ 'XxxDevices、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null'またはその依存関係の1つを読み込めませんでした。不正な形式のプログラムを読み込もうとしました。
Source = XxxDevicesService
FileName = XxxDevices、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null
FusionLog =から読み込まれるアセンブリマネージャー:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll
実行可能ファイルc:\ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exeで実行
---詳細なエラーログが続きます。
===バインド前の状態情報===
ログ:ユーザー= XXX
ログ:DisplayName = XxxDevices、Version = 1.0.0.0、Culture = neutral、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 file:/// c:/TeamE/bin/Release/XxxDevices.DLLのダウンロードを試みています。
ERR:アセンブリのセットアップを完了できませんでした(hr = 0x8007000b)。プローブが終了しました。
スタックトレース:
XxxDevicesService.Program.Main(String [] args)
System.AppDomain._nExecuteAssembly(RuntimeAssemblyアセンブリ、String [] args)で
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()で
System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallbackコールバック、オブジェクトの状態、ブール値ignoreSyncCtx)で
System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallbackコールバック、オブジェクトの状態)
System.Threading.ThreadHelper.ThreadStart()で
InnerException:
XxxDevicesServiceですか?特定のプラットフォーム(32ビットなど)用にコンパイルされていますか?その場合は、プラットフォームを32ビットにコンパイルする必要があります。
