4

私は次の問題に悩まされています。Class1私はAssembly1で言うクラスを持っています。私は Assembly2 に移動Class1し、Assembly2 で廃止Class1されました (同じ名前空間を保持しており、ユーザーの重大な変更を避けるために今は削除できません)。

これで、Assembly1 と Assembly2 の両方を参照する単体テスト アセンブリ TestAssembly2 が作成されました。単体テストで使用しようとすると、コンパイルの問題がClass1あいまいになります。Assembly1 と Assembly2 の両方のアセンブリClass1に 2 つあるので、これは理にかなっています。Class1

質問Assembly1 ではなく Assembly2 で定義され たものを使用するようにコンパイラに指示する方法はありますClass1か (Assembly1 のものは廃止されたため)?

編集Assembly1 は Assembly2 への参照を持ってはならないため、型転送を使用できません:(

4

2 に答える 2

6

TypeForwardedTo属性 を試すことができます。

[assembly:TypeForwardedTo(typeof(Class1))]

そうすれば、何も壊さずに型を別のアセンブリに完全に移動できます。ランタイムが転送を処理するため、参照アセンブリを再構築する必要さえありません。
詳細については、こちらを参照してください:
TypeForwardedTo 属性を使用した型転送

編集: Assembly1 から Assembly2 を参照できない場合は、次のように定義できますextern alias:
extern エイリアスの MSDN ドキュメント (C# リファレンス)

ソリューション エクスプローラーでアセンブリへの参照を選択し、プロパティ ウィンドウでエイリアスを編集することで、それらを定義できます。

次に、型を で修飾するだけですyourAlias::Class1

于 2012-06-22T12:02:12.900 に答える
3

アセンブリにエイリアスを設定する必要があります。

使用するプロジェクトの参照ノードの下で、Assembly2 を選択し、別の「エイリアス」、たとえば「a2」を設定します。

また、コードを追加extern alias a2します。

この型を参照する必要がある場合は、 を使用しますa2::YourName.Class2。これにより、あいまいさがなくなります。

Jon Skeet は、これがどのように機能するかをすでに説明しています

于 2012-06-22T12:05:27.270 に答える