3

サードパーティのサプライヤーからの参照を使用する製品があります。新製品のリリースに伴い、この参照を新しい名前に変更しました。

私たちがやりたいことは、ライブラリの古い名前と新しい名前の両方に対して実行できるように、アプリケーションの 1 つのバージョンをコンパイルすることです。

基本的に変更はなく、使用するライブラリの部分間で 1 つのメソッドの名前を変更するだけですが、両方を処理するアプリケーションを開発する方法がわかりません。

必要に応じて、コードを分岐して両方で動作させることができますが、すべての呼び出しがそれを通過し、古いものまたは新しいもののいずれかにディスパッチされるある種のアダプターが本当に必要です。

新しいアプリケーションをインストールすると、古いライブラリが削除されるため、古いコードはコンパイルされません。

私が試すことができること、またはこの問題を回避する方法についての指針はありますか?

また、アプリケーションは Visual Studio 2005 を使用して C# で開発されています。

4

2 に答える 2

1

次の手順をお勧めします。

  • コードをリファクタリングして、ライブラリから継承する独自のクラスを作成し、ライブラリへの呼び出しを分離します (現時点では独自のメソッドはありません。変更箇所は 1 か所のみです)。
  • この 1 つのクラス内で Reflection を使用して、2 つのメソッドのうちどちらが使用可能かを調べます。ライブラリを頻繁に呼び出す場合は、実際のメソッドをキャッシュして、パフォーマンスの低下を回避します。実際の反射は次のようになります。

    タイプ タイプ = Type.GetType(エイリアン); MemberInfo[] mbrInfoArray=type.GetMethods();

このメソッドは、Invoke を使用して呼び出されます。

于 2009-07-03T05:09:49.280 に答える