3

を使用して別のアセンブリをロードしています

Assembly.LoadFrom("path.exe");

その後、そのexeをファイルシステムから削除できないようです。だから私は、このパスが開いているファイルハンドルを保持しているかどうか、どうすればそれを閉じることができるか疑問に思っていましたか?

4

2 に答える 2

7

はい、アセンブリが 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);
}
于 2013-07-24T15:25:38.913 に答える
2

デフォルトでは、ファイルはロックされますが、.NET にはシャドウ コピーと呼ばれる機能があり、アセンブリのコピーを作成して代わりに読み込みます。ASP.NET はこれに依存して、これらのロックの問題に遭遇することなく Web サイトを更新できるようにします。

詳細については、MSDN のシャドウ コピー アセンブリのトピックを参照してください。

于 2013-07-24T15:29:11.320 に答える