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