2011-02-22 9 views
10

実行時にアセンブリの1つのバージョンを読み込み、AppDomainの実行中にそのDLLを置き換えるプラグインシステム(IoCコンテナと併用する)がある方法はありますか?私はアプリケーションを再起動したくありません。実行時にアセンブリを.NETで置換する

MEFはこれに似ていますか?

答えて

3

これは本質的にNUnitの機能です(少なくとも私はしばらくコードには入っていませんでした)。しかし、別のAppDomainにテストアセンブリをロードし、そのドメインのコードをAppDomainのDoCallbackメソッドを使用して呼び出し、再コンパイルした場合はテストアセンブリを再ロードします。

dllをアンロードまたはリロードすることはできませんが、appdomainをアンロードして再ロードしてコードを実行することはできますが、

1

ドメインからアセンブリをアンロードする方法がないため、純粋な.netを使用することは不可能です。 MEFは管理されたコードで書かれているので、私はそれが可能であるとは思っていません。私は別のドメインにアセンブリを読み込むことでこの問題を解決しました。私はそれをリロードしたいときに停止し、再び始めました。

+0

他のappdomainsの他のコードに1つappdomainアクセスできますか?私がIoCコンテナに登録したとします。それを解決できますか? –

+0

@ダニエルはい、他の[appdomain](http://msdn.microsoft.com/en-us/library/system.appdomain.aspx)のコードにアクセスするには特別なコードが必要です。 –

+0

例がありますか? –

1
+0

私は設計時にそれを必要としません。 –

+0

私はあなたの質問を誤解しましたが、私の答えは変わりません。 –

+0

この場合、インターフェイスに対するプログラミングがどのように役立つのか分かりません。私はそれのためにすべてだが、dllが何らかの理由で再ロードされる必要があるなら、あなたはそれをまだ処理しなければならない。理由は分かりませんが、インターフェイスとのプログラミングよりも本当の理由があるとは思えません。 –

0

このCodeProject記事はそれを行う方法について説明しますように見えます。 MSDN Forumsのこの質問は、類似していると思われ、このSO questionにはどのように行うかが示されています。これらのリンクのすべては、AppDomainsを適切に廃棄する問題によって作成されたリークを警告します。購入者は注意してください。

+0

誰でもこれをやっている経験がある人や、別のメカニズムを使ってプラグイン対応のMVC Webサイトを即座に更新できると思ったら興味があります。 – JoeB

0

実行中のアプリケーションドメインでDLLをアンロードすることはできません。あなたができることは、MEFを使用して複数の実装を処理するためにアプリケーションを準備することです。その場合、新しいdll(インタフェース、モジュールなどの新しい実装)をMEFフォルダにコピーし、再構成して使用することができます。しかし、慎重に、それはあなたのメモリを費やすつもりです。

あなたはそれについて読んで、サンプルhereをダウンロードできます。

関連する問題