この記事は、x64マシン上で.NET Framework 3.5、3.0、または2.0向けにターゲットされた32ビットアプリケーションを、MSBuild 4.0やMicrosoft Visual Studio 2010でコンパイルできない問題を解決するのに役立ちます。
元の製品バージョン: Visual Studio 2010
元の KB 番号: 2028833
症状
あなたは Visual Studio 2010 を使用して、x64 マシンで x86 構成を対象としたアプリケーションを構築しています。 このプロジェクトには、32ビットアセンブリを参照するリソースファイルが含まれています。 選択されたターゲットフレームワークは3.5、3.0、または2.0です。
次のエラーが発生することがあります。
Form1.resx(161,5):エラー RG0000: ファイルまたはアセンブリ "<file_name>" あるいはその依存関係の一つを読み込むことができませんでした。 正しくない形式のプログラムを読み込もうとしました。 行 161、位置 5。
診断ビルド ログには、 GenerateResource タスクが失敗したことを示します。
原因
Resgen.exe、Windows SDK の一部である <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin
に含まれているものは、MSIL としてマークされているため、64ビットプロセスとして実行されます。 32ビットアセンブリの読み込みを試みるが、失敗します。
解決
この問題を回避するには、次の手順を実行する必要があります。
Visual Studio のすべてのインスタンスを閉じてください。
Visual Studio Tools サブフォルダーから、管理者として実行するオプションを使用して Visual Studio コマンドプロンプト (2010) を管理者権限で開きます。 ディレクトリを
<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\
に変更する。コマンドを発行します。
corflags /32bit+ ResGen.exe /force
<project_name>.csproj をメモ帳で開きます。
プロパティ
<ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>
をPropertyGroup
セクションの下に追加します。 csprojファイルを保存して閉じてください。
詳細情報
v3.5、v3.0、または v2.0 を対象とする 64 ビット アセンブリを参照する .resx ファイルをビルドする場合は、その前にこの回避策を元に戻す必要がある場合があります。
CorFlagsCorFlags.exe (CorFlags 変換ツール) が役立つ場合があります。