2

データベース内のプリコンパイルされたコードからオンザフライで作成される.NETアセンブリDLLがあります。DLLファイルを作成し、それにデータを入れ、Assemblyクラスとともにロードし、プロセスが終了したときにそのDLLを削除する方法はありますか?

FILE_SHARE_DELETE私の最初の考えは、フラグを付けて開き、ロードしAssembly.LoadFrom,て、自動的に削除することでした。

LoadLibraryはFILE_SHARE_DELETEフラグ付きのファイルを開きますが、DLLがまだメモリにマップされている場合、OSはファイルを削除しません。

したがって、外部の「ターゲットプロセスの終了後にこのファイルを削除する」実行可能ファイルを使用または開始せずにプロセスが終了したときにDLLを削除するにはどうすればよいですかAppDomains(実行時にロードされる.NET DLLはユーザー入力に依存するため、これを行うには何らかのプロセスが必要になりますコミュニケーション、避けたい)。

4

2 に答える 2

0

アセンブリがコンパイルされて保存された場所を追跡している場合はFile.Delete、その場所で使用できます(System.IOにあります)

于 2010-03-11T01:45:09.043 に答える
0

いいえ、それはうまくいきません。CLR は、メモリ マップされたファイル ビューを DLL に作成します。そのビューが破棄されるまで、ファイル ビューを削除することはできません。AppDomain がアンロードされるまで、これは起こりません。おそらくプライマリ AD にロードしているので、プログラムの実行が停止するまで、それは起こりません。

AD を使用したくない場合に考えられるのは、メイン プロセスを開始し、実行が停止した後に DLL を削除するヘルパー プロセスだけです。

于 2010-03-11T01:45:25.297 に答える