シナリオを示してから、誰かが解決策/回避策を持っているかどうかを確認してください。
クラスのみを含むライブラリ (DLL) があります。別のライブラリには、最初のライブラリのクラスが実装するインターフェイスがあります。クライアントは常に、インターフェイスを含むライブラリの 1 つのバージョン (常に最新のもの) のみを参照し、それらのインターフェイス (より多くのインターフェイス/メソッド) への追加のみが行われます。また、そのインターフェイス ライブラリのバージョンは 1 つだけです - クライアントが参照を更新する必要がないように (インターフェイス ライブラリはリフレクションを介して読み込まれます - 通常のプローブ ルールは適用されません。に頼む)。インターフェイスを実装するライブラリには、異なるクライアントが同時に参照する複数のバージョンがあります。
この問題は、クライアント アセンブリが古いバージョンの実装ライブラリを参照している場合に発生します。実装ライブラリのクラス型からオブジェクトを作成し、それを別のクライアント アセンブリに渡します。そのクライアント アセンブリは、インターフェイス ライブラリの最新 (かつ唯一の) バージョンを使用し、渡されたオブジェクトを適切なインターフェイス型でキャストしようとします。このキャストは、「System.TypeLoadException: アセンブリ Z の Y 型のメソッド X には実装がありません」という例外で失敗します。インターフェイスの新しいバージョン (同じバージョン番号 - 古いライブラリが破壊された) ではメソッド X が定義されているため、この例外が予想されましたが、渡されたオブジェクトの古いバージョンには、対応するインターフェイスを実装することを示すメタデータが含まれています。
それで、私の質問はこれです。クライアントにそのインターフェイスを使用させる方法はありますが、参照されたオブジェクトに実装されていないメソッドが呼び出されたときにのみ例外が発生します(参照されたオブジェクトが新しいインターフェイス型にキャストされたときに例外が生成されるのではなく)?
ちなみに、インテリセンス/コンパイル時の型チェックが必要なため、遅延バインディングはオプションではありません...また、関数ポインターとラッパークラスでこれを行う方法を知っています-より良い解決策を望んでいました通常の .NET タイプで調整します。
ありがとう - どんな助けでも大歓迎です