2

2 つの異なる場所から同じ依存 DLL をロードする、提供された DLL を使用しようとしています。

サプライヤーの展開では、2 つの場所で conicide が発生しましたが、私の場所では発生しませんでした。

コードを実行すると、クラス キャスト例外が発生します。

Unable to cast [A]Type to [B]Type

このエラーは、StackOverflow の質問の操作で発生したものと同じです。アセンブリの場所が異なり、型のキャストが停止しました

2 つのタイプは、DLL の 2 つの異なる場所 (2 つのディレクトリにコピーされた同じ物理ファイル) からロードされた同じタイプです。

二重 DLL の署名で厳密な名前を使用しようとしましたが、うまくいきませんでした。

2 つの型を同じ型として扱うように CLR に指示する方法はありますか?

4

1 に答える 1

1

これは多くの理由で許可されていないと確信しています。

まず、2 つのアセンブリがあるとします。1 つ目は Animal を定義し、Dog という子孫を持っています。2 番目は Animal を定義します。両方のアセンブリが同じ名前空間を使用します。

実行時に宣言するとどうなりますvar B = new Dog();か? コードは 2 番目のアセンブリのバージョンの Animal を交換する必要がありますか?

と宣言しvar A = new Animal();たら?IMHO、コードはそれを防ぐために単純に内破する必要があります。

セキュリティの観点から、ライブラリと同じ名前空間を定義する別のアセンブリに単純にリンクして、特定のクラスを交換することは絶対に望まないでしょう。

ポイントは、まったく同じ型を含む両方の物理アセンブリにリンクすることによって、実際に解決する方法がないという大きな問題を引き起こすことです。サプライヤーと同じように動作するようにコードを変更してください。

于 2013-10-02T15:57:41.340 に答える