ここでは、クライアントサイトに侵入したかなり不快なピクルスです。クライアントには約100台のワークステーションがあり、そこで私たちは製品「MyApp」のバージョン1.0.0を導入しました。バージョン間のインターフェイスの変更 - 管理方法
ここで、製品が行うことの1つは、アドインをロードすることです(「MyPlugIn」と呼びます)。中央のサーバー上で新しいバージョンがあるかどうかを最初に探します。そのファイルをローカルにコピーした後、Assembly.Load
を使用してアドインを読み込み、特定の既知のインターフェイスを呼び出します。
その後、クライアントはいくつかの製品にv1.0.1をインストールしたかったのです。 (すべてではないが)MyPlugInの新しいバージョンが付属している
しかし、MyAppとMyPlugInの両方が参照する共有DLLがあり、MyDLLと呼ばれています。 MyClass.MyMethod
。 v1.0.0とv1.0.1の間で、MyClass.MyMethod
の署名が変更されました(パラメータが追加されました)。そして今MyPlugInの新バージョンがクラッシュへv1.0.0デベロッパークライアントアプリケーションが発生します。見つからない
方法:MyClass.MyMethodなど(可能System.String)
クライアントがあからさまにV1を展開する必要はありません.0.1をすべてのクライアントステーションで使用すると、v1.0.1に含まれていた修正がいくつかのワークステーションでのみ必要であり、すべてのクライアントにロールアウトする必要はありません。残念ながら、私たちはClickOnceやその他の大量配布ユーティリティを使用していませんので、v1.0.1を公開することは苦労し、そうでなければ不要な練習になります。
MyPluginにコードを書き込んで、MyDLL v1.0.0またはv1.0.1のどちらを扱っているかにかかわらず、同じように機能するようにする方法はありますか?おそらく、実際にそれを呼び出す前に、リフレクションを使って、それが存在するかどうかを確認するために、予想されるインターフェイスを探るいくつかの方法がありますか?
EDIT:私も言及すべきです - 私たちはかなり厳しいQA手順を持っています。 v1.0.1はQAによって公式にリリースされているため、MyAppまたはMyDLLを変更することはできません。唯一の移動の自由は、MyPluginを変更することです。MyPluginは、この顧客専用のカスタムコードです。
古いプラグインのバージョンで期待される方法をMyDllに再追加しないのはなぜですか?内部的には、このメソッドは新しいメソッドのバージョンを呼び出して、新しいメソッドのparamのデフォルト値を渡すことができます。 – Steve
@Steve - MyDLLを変更することはできません –
MyClass.MyMethodは静的ですか? –