次の方法で共有


MSBuild 4.0 または Visual Studio 2010 は、x64 マシン上で .NET Framework 3.5、3.0、または 2.0 を対象とした 32 ビットアプリケーションのコンパイルに失敗する可能性があります。

この記事は、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ビットアセンブリの読み込みを試みるが、失敗します。

解決

この問題を回避するには、次の手順を実行する必要があります。

  1. Visual Studio のすべてのインスタンスを閉じてください。

  2. Visual Studio Tools サブフォルダーから、管理者として実行するオプションを使用して Visual Studio コマンドプロンプト (2010) を管理者権限で開きます。 ディレクトリを<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\に変更する。

  3. コマンドを発行します。

    corflags /32bit+ ResGen.exe /force
    
  4. <project_name>.csproj をメモ帳で開きます。

  5. プロパティ<ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>PropertyGroupセクションの下に追加します。 csprojファイルを保存して閉じてください。

詳細情報

v3.5、v3.0、または v2.0 を対象とする 64 ビット アセンブリを参照する .resx ファイルをビルドする場合は、その前にこの回避策を元に戻す必要がある場合があります。

CorFlagsCorFlags.exe (CorFlags 変換ツール) が役立つ場合があります。