访问我的程序集的过程是什么(在Visual Studio中清理项目时删除失败?

时间:2009-05-03 12:50:01

标签: .net visual-studio msbuild

我在自定义的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上有句柄。为什么以及如何阻止它有句柄?

2 个答案:

答案 0 :(得分:1)

我不完全确定你问题的目标。您可以使用进程资源管理器找出锁定文件的进程。

像这样的东西: http://windowsxp.mvps.org/processlock.htm

答案 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);
}

这至少会设置对象的范围。