を使用して別のアセンブリをロードしています
Assembly.LoadFrom("path.exe");
その後、そのexeをファイルシステムから削除できないようです。だから私は、このパスが開いているファイルハンドルを保持しているかどうか、どうすればそれを閉じることができるか疑問に思っていましたか?
を使用して別のアセンブリをロードしています
Assembly.LoadFrom("path.exe");
その後、そのexeをファイルシステムから削除できないようです。だから私は、このパスが開いているファイルハンドルを保持しているかどうか、どうすればそれを閉じることができるか疑問に思っていましたか?
はい、アセンブリが appdomain からアンロードされるまで開いています。
本当にファイルを削除する必要がある場合は、その内容をメモリにロードします。Assembly.Load(byte[])
アセンブリをロードするための使用:
using (Stream stream = File.OpenRead("path.exe"))
{
byte[] rawAssembly = new byte[stream.Length];
stream.Read(rawAssembly, 0, (int)stream.Length);
Assembly.Load(rawAssembly);
}
デフォルトでは、ファイルはロックされますが、.NET にはシャドウ コピーと呼ばれる機能があり、アセンブリのコピーを作成して代わりに読み込みます。ASP.NET はこれに依存して、これらのロックの問題に遭遇することなく Web サイトを更新できるようにします。
詳細については、MSDN のシャドウ コピー アセンブリのトピックを参照してください。