我目前正在做以下事情:
FileStream在using()标记中使用braced 创建文件- 只在create 语句中创建文件.其余的陈述几乎是连续的.Process.Start()Assembly.ReflectionOnlyLoadFrom()Process.GetProcessesByNameProcess.KillFile.Delete()我的问题是我的应用程序正在锁定文件,因此当我尝试删除它时,没有任何反应.如果我尝试删除,它会抛出一个异常,说"Access is Denied",如果我尝试写入它,则抛出"另一个进程正在使用此文件".
究竟是什么消耗了上面的文件(字面意思是所有的)?我已经设置了所有引用null,并且甚至称为可怕GC.Collect()而没有运气.
当您加载程序集时,它将托管在当前的AppDomain中.如果您使用ReflectionOnlyLoad(byte[])它加载它将加载为阴影,不会锁定文件.
var bytes = File.ReadAllBytes(path);
var assembly = Assembly.ReflectionOnlyLoad(bytes);
Run Code Online (Sandbox Code Playgroud)
目前,阻止文件的代码是Assembly.ReflectionOnlyLoadFrom()而不是写入文件(假设FileStream在尝试删除之前处理).只有在卸载AppDomain时才会释放该文件.