次の方法で共有


Visual Studio でプロジェクトをビルドするときのエラー

この記事は、Visual Studio で .NET Framework ベースのプロジェクトをビルドできない問題を解決するのに役立ちます。

元の製品バージョン: .NET Framework 4.5
元の KB 番号: 2956788

症状

次のシナリオを考えてみましょう。

  • Microsoft Visual Studio で .NET Framework 4.0 ベースのプロジェクトを使用してビルドされたアプリケーションがあります。

  • このアプリケーションには、Visual Basic 6.0 ActiveX コントロールがあります。

  • このコントロールは、Office プライマリ相互運用機能アセンブリ ファイルを参照します。 たとえば、office.dll ファイルなどです。

  • Visual Studio でプロジェクトのターゲットを .NET Framework 4.5.x に変更します。

このシナリオでは、プロジェクトをビルドするときに、このビルド プログラムはコントロールの相互運用機能アセンブリを読み込むことができません。 さらに、次のようなエラー メッセージが表示されます。

AxImp エラー: アセンブリ 'office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' への依存関係がプリロードされていないため解決できません。 ReflectionOnly API を使用する場合、依存アセンブリは、ReflectionOnlyAssemblyResolve イベントを通じて事前に読み込まれるか、必要に応じて読み込まれる必要があります。

この問題は、.NET Framework 4.0、.NET Framework 4.5、または .NET Framework 4.5.1、および Microsoft Office 製品がインストールされているコンピューターでのみ発生します。

原因

この問題は、共通言語ランタイム (CLR) 2.0 と CLR 4.0 の間でタイプ ライブラリと依存関係の読み込み方法が変更されたために発生します。

.NET Framework 4.0 では、プライマリ相互運用機能アセンブリを参照するタイプ ライブラリから型を解決するときに、特定のアセンブリを読み込む必要があります。 ただし、.NET Framework 2.0 ではそうではありませんでした。 ActiveX インポーターは、.NET Framework 2.0 と Framework 4.0 の間の動作を変更しませんでした。 この設計変更により、相互運用機能アセンブリが生成されません。 そのため、ActiveX インポーターが Visual Studio で実行されている場合、インポーターはこの ActiveX コントロールのすべての参照を解決してプリロードすることはできません。

対処法

この問題を回避するには、AxImp.exeを使用して相互運用機能アセンブリを作成します。 たとえば、「 Symptoms 」セクションに記載されているエラー メッセージは、必要な Microsoft Office アセンブリがバージョン 12.0 であることを示しています。 この問題を解決するには、次の手順に従ってください。

  1. グローバル アセンブリ キャッシュ (GAC) で必要な Office アセンブリを検索します。

  2. エラー メッセージに記載されている Office バージョンのパスを選択します。 これは C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c のようになっています。

  3. Visual Studio コマンド プロンプトから次のコマンドを実行して、新しい相互運用機能アセンブリを生成します。

    aximp < **Name of Ocx** > /out: < **Interop assembly name** > /rcw: <C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c\office.dll>
    
  4. Add References機能を使用して、生成された相互運用機能アセンブリを Visual Studio プロジェクトに追加します。

Office プライマリ相互運用機能アセンブリがコンピューターにインストールされていない場合でも、visual Studio ビルド プロセスから実行されている場合でも、AxImp.exe ツールはサポートなしで型を解決できます。

詳細情報

AxImp.exeはコマンドライン ツールであり、Visual Studio で使用できます。 このツールは、コマンド ライン引数として参照アセンブリを受け入れます。 そのため、このツールは、.NET Framework 4.0 で想定される追加のアセンブリを読み込むことができます。