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 プロジェクトによって、プロセスのビット数が決まります。