同じアセンブリの異なるバージョンをロードする
-
09-06-2019 - |
質問
リフレクションを使用して、同じアセンブリの 2 つの異なるバージョンを読み込む必要があります。同じプロセスで 2 つの異なる AppDomain に 2 つのバージョンをロードできますか?
古いバージョンのアプリから新しいバージョンにデータを移行する必要があります。これが可能かどうか、または 2 つの別々のプロセスを使用する必要があるかどうかを教えてください。
解決 2
アップデート:私の調査結果を回答として投稿しようと思いました。開発作業や実行時エラーの追跡などの点で、リフレクションは複雑すぎることが判明しました。私は昔、同様の状況に直面したときに、2 つの異なるプロセスを使用して別のアプローチをとったことを覚えています (ありがとう、Brandon)。
計画は次のとおりです。洗練されたものはありませんが、開発とトラブルシューティングの点では簡単です。一度きりの仕事なので、やり遂げるしかありません。
新しいバージョンのアプリケーションを含むリモート プロセス (サーバーと呼びます) をホストします。リモート クライアントには古いバージョンの参照があります。
リモートクライアントは、移行に必要なデータを含むオブジェクトをインスタンス化してロードします。古いオブジェクトを共通のシリアル化可能なオブジェクトに変換し、パラメーターとしてサーバーに渡します。
Remoting Server は、共通データを使用して新しいオブジェクトをインスタンス化し、ロードします。新しい型の関数を呼び出して、そのデータを永続化します。
他のヒント
設計時にこれを実行している場合 (そうでないことを示しています)、これは次の点で役立つはずです。
http://blogs.msdn.com/abhinaba/archive/2005/11/30/498278.aspx
リフレクションを通じて動的に実行している場合 (ここでの場合のように)、これは役立つかもしれません。
http://infosysblogs.com/microsoft/2007/04/loading_multiple_versions_of_s.html