2017-05-01 15 views
0

特定のサードパーティのDLLを参照するクラスライブラリがあります。 このDLLはバージョンを頻繁に変更しますが、常に同じメジャーバージョン内で下位互換性があります。私のクラスライブラリは、DLLの特定の型を使用し、これらのサードパーティのDLLに含まれている別のメソッドを実行します。ランタイムスローメソッドが見つかりません - 参照されたアセンブリバージョンの不一致

現在の問題は1つありますが、第三者DLLの複数のメジャーバージョンが存在すると大きな問題が発生しますので、ここではこのアプリケーションのデザインを再考する必要があります(メジャーバージョン、具体的には3)。

  1. コンパイル時に元々使用されていたものとは異なるバージョンの参照アセンブリを使用できることを確認するにはどうすればよいですか?私のランタイムは、よりマイナーバージョンのDLLでロードされますが、'メソッドが見つかりません'例外がスローされます。私はタグを削除しただけでなく、Assembly.Loadを実行して新しいDLLを指定するときの動作をシミュレートしようとしましたが、どちらも同じ結果をもたらします。メソッドが見つかりません。

  2. 単一のDLL内で参照されるdllの3つのメジャー(!)バージョンをサポートする最良の方法はありますか?クラスライブラリの使用の性質上、ユーザーに正しいバージョンを選択させたり、3つの異なるDLLを構築させたりすることはできません。

答えて

1

そこbinary code compatibilityを壊すあなたのベンダーのチャンスであり、あなたは1がこの問題に対する簡単な解決策はありません何をしているかに影響することができない場合。 Late bindingは、C#でreflectionまたはdynamicを使用してこれを処理するための回避策の1つになりますが、実行時のパフォーマンスとコードの複雑さが非常に高くなります。


ますが、とにかくこの統合レイヤーを構築するために設定されている場合は、あなたがそれらとAdapter間の既知の順列をカバーするために3つのすべてのバージョンをコードしなければならないでしょうがに探し始めるのに良いデザインパターンであるかもしれません。あなたは、外部ライブラリの違いとエンティティが統合レイヤーから自分のビジネスロジックに流出しないようにします。そのため、壊れやすいライブラリを残りのコードから分離するために多くの変換ロジックが必要になります。型、メソッド、署名、振る舞い、および例外がスローされるような違いは、カプセル化されて閉じ込められなければならない。

また、アプリケーションまたはプレゼンテーションレイヤーをこの敵対的なライブラリに依存するように再設計する必要があります。その違いに応じて相違を処理し、独自のラッパーのみに依存させる必要があります。

ベンダーライブラリの3つのバージョンすべてに対して、リポジトリにコードをチェックインするたびに、常に確実に統合テストを実行する必要があります。また、ベンダーがライブラリのコードを作業しているので、互換レイヤーのメンテナンスとサポートのために十分な時間を割り当てる必要があります。

関連する問題