2

現在のプロジェクトでは、WCFサービスを使用してdllファイルをクライアントに送信しています。dllファイルには、クライアントがデータを視覚化するために使用するUserControlsが含まれています。ただし、クライアントがこれを知らなくても、サービスによって新しいUserControlが導入される場合があります。これが発生したとき、新しいdllファイルをクライアントに送信して、クライアントが最新バージョンのUserControlsを使用できるようにします。

ただし、この新しいdllファイルをクライアントのHDに(FileStreamを使用して)書き込みたい場合、ファイルが別のプロセスによって使用されているという例外が発生します(もちろん、クライアントには常にUserControlsのアセンブリバージョンがあります) HDなので、これを上書きする必要があります)。

エラーが発生せずにこのファイルを上書きする方法はありますか?MEFを使用して、クライアントプロジェクトのアセンブリファイルを読み取ります。アセンブリファイルをクライアントに送信するには、ファイル名を文字列として送信し、ファイルの内容をバイト配列で送信します。

4

1 に答える 1

2

これは通常Shadow Copyingで行われますが、MEF で動作するかどうかについて決定的なものは見つかりません。

アプリケーションを閉じて再度開くときに新しいコントロールが読み込まれることが許容される場合は、MEF で作成する前にすべてのプラグインをコピーできます。

これは、基本的に MEF + Shodow Copy を試している誰かのブログ投稿と、特に関連性の高いコメントです。

ここでの根本的な問題は、.NET が動的なアセンブリのアンロードをサポートしていないことです。アセンブリをリロードすることはできますが、古いアセンブリで使用されていたメモリを回復することはできません

于 2011-03-24T18:47:40.430 に答える