2011-09-16 10 views
0

私は管理対象のC++アセンブリで奇妙な問題に遭遇しています。私はC#プロジェクトとマネージドC++(DLL)プロジェクトを.NET 3.5をターゲットに設定していますが、マネージアセンブリをコンパイルすると、その "ランタイムバージョン"は2.0になります。特定の.NETバージョン(VS2008)に対してマネージC++アセンブリをコンパイル

.NET 3.5プロジェクトと.NET 4.0バージョンのCSScriptで同じアセンブリを使用しようとしていますが、CSScriptは.NET 2.0アセンブリで実行することを拒否しています(「ランタイム例外:混合モードアセンブリはバージョン 'v2.0.50727'のランタイムであり、追加の構成情報なしで4.0ランタイムでロードすることはできません。私は、.NET 3.5をターゲットとC#プロジェクトを作成します

  1. は、私は、次の(VS 2008で行われたすべての作業)に問題をローカライズするために管理しました。
  2. 空のC++プロジェクトを同じソリューションで作成します。
  3. 空の.cppファイルをC++プロジェクトに追加します。
  4. 構成タイプ=ダイナミックライブラリ(.dll)、共通言語ランタイムサポート=共通言語ランタイムサポート(/ clr)、共通プロパティの "対象フレームワーク"が3.5に設定されていることを確認してください。
  5. C++プロジェクトをコンパイルし、C#プロジェクトへの参照として追加します。

C#プロジェクトの参照のプロパティを見ると、「ランタイムバージョン」がv2.0.50727であることがわかります。私の質問は、一体何ですか?

なぜランタイムバージョン2.0ですか?私はすべてを3.5に設定しました...管理されたC++プロジェクトを.NET 3.5用にコンパイルするにはどうすればいいですか?

おかげで、 マレク

+0

.NET 4.0プロジェクトで.NET 2.0混在モードアセンブリを参照するには、[何の追加設定が必要ですか?](http://stackoverflow.com/questions/2455654/what-additional-configuration- a-net-2-0-mixed-mode-a) –

答えて

0

"修正プログラム"は問題を実際に修正することはありません。

ランタイム例外:混合モードアセンブリは、ランタイムのバージョン「v2.0.50727の」に対して構築されており、追加の構成情報なし4.0ランタイムでロードすることはできませんあなたが4.0ランタイムを使用する必要が

これを避け、神話的な「3.5」バージョンを試してみても意味がありません。そのためには、VC++ 2010コンパイラを使用してコンパイルする必要があります。 .NET 3.5アプリケーションでそれを使用する必要があるので、それは非スターターです。

「追加の設定情報」を参照してください。 this questionおよびthis oneを参照してください。

+0

あなたの答えをありがとう。私は4.0で3.5でビルドされたアセンブリを使用できると思っていましたが、2.0ではできませんでしたか? 3つのアセンブリがコンパイルされている場合。5は動作しません。そうですね、2つのプロジェクト間で同じDLLを共有しようとするのは難しいです。 .NET 3.5は4.0と互換性がありますが、3.5未満のものは互換性がないと読んでいるので、明確化が必要です。 – marco1475

+0

@marco:それを動作させる作品。私がリンクしている質問を読んでください。 2.0と3.5はどちらも同じように動作します。つまり、構成を変更するまでは動作しません。 –

+0

重要な情報は、.NET 4.0では、.NETの以前のすべてのバージョンではapp.configファイルが必要であり、2.0だけでなく、私が信じるように導かれました(すべての例では2.0、3.5では3.5)。 残念ながら、CS.Script(.NETを実行する前に.NETをコンパイルするスクリプト言語)でapp.configファイルを使用することができないため、3.5のプロジェクト用と、 4.0スクリプト。あなたの答えをもう一度おねがいします。 – marco1475

1

ランタイムバージョンは、仮想マシンではなく、.NETクラスライブラリのバージョンを指します。 .NET 3.5は.NET 2.0と同じ仮想マシン上で実行されるため、参考文献にv2.0.50727が表示されています。 C++プロジェクトがフレームワークの3.5バージョンを実際にターゲットにしているかどうかを確認するには、そのプロジェクトの個々のライブラリ参照を確認する必要があります。

関連する問題