2012-01-31 8 views
7

私はP4とP3という2つのプロジェクトを持っており、それぞれ.net 4.0と3.5を対象としています。私の.Netアプリケーションは.netフレームワークライブラリの2つの異なるバージョンを参照できますか?

各プロジェクトには、System.Dataへの参照もあります。 P4の場合はSystem.Data v4.0.0.0になります P3の場合はSystem.Data v2.0.0.0になります

プロジェクトP4もP3を参照しています。

P4がロードされて実行されると、.net 4.0 CLRが使用されます。実行時に、System.Dataへの参照は、P4とP3の両方でv4.0に解決されるようです。 assemblyBindingリダイレクトを使用してこれをオーバーライドできますが、P4とP3の両方がv2.0に解決されます。

P4がv4.0を使用し、P3がv2.0を使用するようにアプリケーションを構成する方法はありますか?

答えて

3

P3を制御できる場合は、はいです。プロジェクトの参照セクションに移動し、System.Data参照を見つけてプロパティウィンドウを表示します(右クリック - >プロパティ)。

「特定のバージョン」プロパティに「True」を選択します。再コンパイル、再デプロイなど

アセンブリをロードしようとしたときに、.NET 2、3、または3.5がマシンにインストールされていないと、これによってあらゆる種類のランタイムエラーが発生することに注意してください。

編集

私は、しかし、運と、これを試してみました。 P3はまだv4.0で動作します。この設定がP3用に生成されたアセンブリで目に見える効果を持つかどうか知っていますか?例えば。マニフェストには、 "特定のバージョン"がtrueに設定されているかどうかにかかわらず ".ver 2:0:0:0"と表示されます。

あなたはapp.configにこれを追加してみてください:

<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 
+0

私はこれを試しましたが、運がありません。 P3はまだv4.0で動作します。この設定がP3用に生成されたアセンブリで目に見える効果を持つかどうか知っていますか?例えば。マニフェストには、 "特定のバージョン"がtrueに設定されているかどうかにかかわらず ".ver 2:0:0:0"と表示されます。 – Rob

+1

はい、それは私がSebのアドバイスに従ったものです。また、起動タグの属性としてuseLegacyV2RuntimeActivationPolicy = "true"を指定する必要がありました。それ以外の場合は、処理されない例外でクラッシュしました:System.BadImageFormatException – Rob

+0

素晴らしい。彼のリンクは私の設定を思い出させたので、彼の答えを間違いなく受け入れる。 – Randolpho

4

はこれを見ている:In-Process Side-by-Sideそれはいくつかの助けになるかもしれません。

+1

はい、それはトリックでした! – Rob

+0

申し訳ありません。私はアホです。残念ながら、私は何かが欠けていない限り、これは助けにはなりません。これを確認しながらassemblyBindingリダイレクトのコメントを解除できました。リダイレクトがなければ、動作しません。 – Rob

関連する問題