.NET文件锁定问题

Sec*_*rld 2 .net c# file

我目前正在做以下事情:

  • FileStreamusing()标记中使用braced 创建文件- 只在create 语句中创建文件.其余的陈述几乎是连续的.
  • 启动我使用创建的文件 Process.Start()
  • 使用从文件中读取一小部分元数据 Assembly.ReflectionOnlyLoadFrom()
  • 列出正在运行的进程 Process.GetProcessesByName
  • 使用过程杀死进程 Process.Kill
  • 尝试使用删除文件 File.Delete()

我的问题是我的应用程序正在锁定文件,因此当我尝试删除它时,没有任何反应.如果我尝试删除,它会抛出一个异常,说"Access is Denied",如果我尝试写入它,则抛出"另一个进程正在使用此文件".

究竟是什么消耗了上面的文件(字面意思是所有的)?我已经设置了所有引用null,并且甚至称为可怕GC.Collect()而没有运气.

Eli*_*sha 5

当您加载程序集时,它将托管在当前的AppDomain中.如果您使用ReflectionOnlyLoad(byte[])它加载它将加载为阴影,不会锁定文件.

var bytes = File.ReadAllBytes(path);
var assembly = Assembly.ReflectionOnlyLoad(bytes);
Run Code Online (Sandbox Code Playgroud)

目前,阻止文件的代码是Assembly.ReflectionOnlyLoadFrom()而不是写入文件(假设FileStream在尝试删除之前处理​​).只有在卸载AppDomain时才会释放该文件.