2016-10-17 5 views
0

私のプロジェクトは、UIを持つ(参照されていない)DLLプロジェクトを呼び出します。エンドユーザはメインフォーム(メインプロジェクト)を閉じる前にこのフォームを閉じることになっていますが、そうでない場合もあります。クローズドDLLがGetAssemblies()リスト(.NET)にまだ表示されています

AppDomain.GetAssemblies()を使用して、DLLフォームが閉じられているかどうかを確認しようとしました。しかし、DLLフォームを閉じてもGetAssembliesリストに表示されます。私の推測では、それはある時点まで記憶に残っているのだろうか?

メインプロジェクトのすべてのDLLを確実にロードして、メインプロジェクトの終了を許可する前にアンロードしてメモリに保存するのがベストプラクティスですか?

答えて

3

.NETでアセンブリをアンロードする唯一の方法は、ロードされたAppDomainをアンロードすることです。これは、追加のアセンブリを独自のアプリケーションドメインにロードする必要があることを意味します。ただし、アプリケーションドメイン間でデータを共有できないため、プロセス間通信技術を使用してロードされたアセンブリからメソッドを呼び出す必要がある別のAppDomainに追加します。要件に応じて、MarshalByRefObjectからクラスを継承するか、[Serializable]にする必要があります。

いくつかの追加情報および例は、このトピックに用意されていますHow to Load an Assembly to AppDomain with all references recursively?

関連する問題