1

特定のバージョンのベンダー DLL に依存しない .NET コンポーネントを開発した場合、.NET アセンブリである My3rdPartyComponent.dll で動作したとしますが、どのバージョンでもかまいません。

このコンポーネントで見つかったクラスのいくつかのインスタンスは、私のコンポーネントに渡す必要があります。開発者は私のコンポーネント dll を参照しますが、ソース コードにはアクセスできません。

基本的に、ユーザーが 3rdPartyComponent.MyClass のインスタンスをコンポーネント関数に渡すように要求できるようにしたいのですが、それがサードパーティの dll のバージョン 1.1、2.2、2.23.980 などであるかどうかは気にしません。

コンポーネントに渡したいパラメータを入力しながらこれを行う方法はありますか? オブジェクトを参照として使用したくありません。

私のコンポーネント プロジェクトでは、アセンブリ参照で SpecificVersion=True を指定できました。これで私の問題は解決しますか?それとも、私が見ていない他の「dll 地獄」の問題に対処する必要がありますか?

4

1 に答える 1

0

本質的に、いいえ、あなたはあなたが望むことをすることはできません(少なくとも私の知る限りでは). .NET バージョン管理の全体的な前提は、アセンブリの異なるバージョンは異なるアセンブリであるということです。したがって、.NET に関する限り、バージョン 1.1 はバージョン1.1.13rdPartyComponent.MyClassとはまったく異なるクラスです。良くも悪くも、そういう仕組みです。3rdPartyComponent.MyClass

サードパーティのアセンブリを制御できない場合、これをサポートできる唯一の方法はリフレクションを使用することです。.NET 4のdynamic型はそれをかなり簡単にするはずですが、それでもハックであり、インターフェイスが少しでも変更されると失敗します (もちろん、これはバージョン管理の要点です)。

そのアセンブリをある程度制御できる場合は、一部のインターフェイスを別のアセンブリに抽出して、重大な変更がほとんどないため、そのバージョンはほとんど変更されません。その後、具体的なクラスではなく、そのアセンブリからインターフェイスを参照できます。

于 2010-06-08T23:44:51.497 に答える