2011-12-28 28 views
1

私は以下の問題があります。
私は1つの解決策で2つのプロジェクトを持っています。 Core.prjおよびExtension.prj
Core.prjは、名前がprofile.dll(v1)のdllを参照し、Extension.prjは同じ名前と同じ名前空間を持つが、異なるバージョンのprofile.dll(v2)を持つdllを参照します。 Extension.prjCore.prjプロジェクトを参照してください。
Core.prjにはソースファイルがあります。 A.csにいくつかの仮想メソッドが定義されています。 Extension.prjにはソースファイルがあります。 B.csA.csに定義された仮想メソッドをオーバーライドするメソッドがいくつかあります。Core.prjです。exeとdllは同じ名前と同じ名前空間を持つDLLを参照しています

私の考えは、Extension.prjをビルドして実行し、の仮想メソッドをB.csの優先メソッドから呼び出すことでした。さて、B.csのメソッドはprofile.dll(V1)からタイプを使用することになりA.csprofile.dll(V2)とメソッドからタイプを使用しますが、これは仮想profile.dll(V2)からA.cs使用タイプからメソッドではなくprofile.dllから(V1ので、可能ではありません)。

同じ名前と名前空間を持つdllの異なるバージョンを参照するこの考えは、とにかく実行可能なexeとdllからですか?

+0

私は、あなたはおそらく、あなたの理由を持って知っているが、実行時に同じライブラリの異なるバージョンを使用すると、あなたはすべてのコストで避けたい悪夢です。環境内で利用可能な同じライブラリの異なるバージョンを確かに使用でき、アセンブリリダイレクトを使用してアプリケーションが使用するバージョンを「アップグレード」するだけですが、これは一般的にソリューション全体であり、ソリューション内では適用されません。 –

答えて

1

この場合、extern aliasディレクティブを使用することができます。 MSDNから

/R:GridV1 =グリッドを次のように同じ完全修飾タイプ名を持つ2つのアセンブリ、 エイリアスを参照する

は、コマンドプロンプトで指定する必要があります.dllが

/r:GridV2=grid20.dll

これは、外部エイリアスGridV1とGridV2を作成します。これらの エイリアスをプログラム内から使用するには、extern キーワードを使用してエイリアスを参照してください。たとえば、

extern alias GridV1;

extern alias GridV2;

http://msdn.microsoft.com/en-us/library/ms173212.aspx

関連する問題