5

Proj1 と Proj2 の 2 つのプロジェクトを含むソリューションがあります。ここで、Proj1 はスタートアップ プロジェクトです。

Proj1 は (Proj2 のクラスを呼び出すために) Proj2 を参照し、1.0.0.0 でバージョン管理された A と呼ばれるサード パーティの DLL も参照する既存のコードがあります。

Proj2 は同じサード パーティの DLL A を参照しますが、このプロジェクトのクラスは 1.0.0.0 では利用できなかった新しい実装を必要とするため、バージョン 2.0.0.0 で参照します。

これまでのところ、次のことを試しました。1. A を参照するときに「特定のバージョン」を true に切り替えました。 v2.0.0.0 DLL を含むサブフォルダーを指すように、app.config に「プローブ パス」を追加しました。

私が望むのは、通常の \bin\ フォルダーにある A v1.0.0.0 と \bin\v2Folder にある A v2.0.0.0 を確認することです。Proj1.exe を実行すると、Proj1 の古いコードが引き続き表示されることを期待しています。 A v1.0.0.0 のメソッドを呼び出し、Proj2 によって実装されているものを呼び出すときは、A v2.0.0.0 のメソッドのみを呼び出します。

問題は、ソリューションをビルドすると、v1.0.0.0 が v2.0.0.0 に置き換えられ、ビルド ログに「A、Version=2.0.0.0、Culture=neutral、 PublicKeyToken=blah" および "A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=blah". "A, Version=2.0.0.0, Culture=neutral, PublicKeyToken=blah" を任意に選択する.".

誰か助けてくれませんか?

4

3 に答える 3

2

これは、機能を使用して可能になる場合がありextern aliasます。コンパイルするとき、DLL ファイルへのエイリアスを含めます。

csc.exe ... /reference:AV1=v1.0.0.0/A.dll /reference:AV2=v2.0.0.0/A.dll

aliases(これは、参照のプロパティを変更することにより、Visual Studio でも設定できます。)

extern aliascs ファイルでは、名前空間を参照するために使用できます。

extern alias AV1;
extern alias AV2;
// using statements

これにより、各バージョンを個別に参照できます。

var v1foo = new AV1::Foo();
var v2foo = new AV2::Foo();

DLL の 1 つだけを使用するプロジェクトの場合、目的のバージョンへの参照を含めることができます。

// ProjA cs file
extern alias AV1;
using Foo = AV1::Foo; // alternately, path to namespace
...
var foo = new Foo(); // from version 1 of library


// ProjB cs file
extern alias AV2;
using Foo = AV2::Foo; // alternately, path to namespace
...
var foo = new Foo(); // from version 2 of library

これにより、両方のバージョンの DLL を同じソリューションで個別に参照できます。( MSDN リファレンス)。

于 2012-07-18T23:30:25.853 に答える
0

サードパーティのdllバージョン2.0の名前をA_2.dllに変更し、名前を変更したdllへの参照を追加します。

于 2012-07-18T22:52:35.247 に答える