我在自定义的msbuild任务中运行外部进程。这个任务在程序集A中,当我构建项目B时调用它。一切正常。但是,在尝试清理项目时。 Visual Studio 2008给出了一个错误,指出“进程无法访问程序集A,因为它正被另一个进程使用”。重新启动Visual Studio可以解决此问题。
调用外部进程的代码如下
流程流程=新流程();
process.StartInfo = new ProcessStartInfo { FileName = @“c:\ program.exe”, 参数=“”, UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true };
的Process.Start();
process.WaitForExit(5000);
如何排除类似问题?
更新:使用Process Explorer,它告诉我devenv.exe在程序集A上有句柄。为什么以及如何阻止它有句柄?
答案 0 :(得分:1)
我不完全确定你问题的目标。您可以使用进程资源管理器找出锁定文件的进程。
答案 1 :(得分:0)
这有点正常...... devenv.exe正在执行该过程,但句柄仍在那里。我不确定你怎么能避免这种情况,但我确信几分钟后手柄可能会消失。
我不确定垃圾收集是否与它有关,但你尝试过这样的事情吗?:
using (Process process = new Process()){
process.StartInfo = new ProcessStartInfo { FileName = @"c:\program.exe", Arguments = "", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true };
process.Start();
process.WaitForExit(5000);
}
这至少会设置对象的范围。