我正在尝试开发一个执行tfs merge.Command执行的控制台应用程序:
tf合并$ / CodeBase / ALPHA $ / CodeBase / BETA / recursive / version:C4~C6
如果合并操作中存在冲突,则首先引发错误,并在解决冲突的地方显示解决冲突窗口。解决冲突后,将显示最终输出。
对于执行tf merge的控制台应用程序,c#代码如下:
Process proc = new Process();
proc.StartInfo.FileName = "tf.exe";
proc.StartInfo.Arguments = " merge $/CodeBase/ALPHA $/CodeBase/BETA /version:C4~C6";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
proc.WaitForExit();
string line1 = proc.StandardOutput.ReadLine();
string line2 = proc.StandardError.ReadToEnd();
问题:
该进程退出,只显示初始错误消息。理想情况下,它应该等到我解决所有冲突,然后进程将等到那时。 但是因为我正在设置 proc.StartInfo.RedirectStandardError = true; ,所以应用程序不会等待解决冲突窗口(甚至没有启动它)。但如果我评论这一行,它正常工作,但我无法读取最终输出。
请帮帮我。
编辑:7/23
我相信我正在进行异步读取操作(可能会出现问题)。有没有办法可以执行同步读取???
答案 0 :(得分:0)
您必须附加事件处理程序 proc.ErrorDataReceived + =(s,e)=> ErrorLine(e.Data); proc.OutputDataReceived + =(s,e)=> OutputLine(e.Data);
void ErrorLine(string text)
{
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = ConsoleColor.DarkRed;
Console.Error.WriteLine(text);
Console.ResetColor();
}
void OutputLine(string text)
{
Console.Error.WriteLine(text);
}
答案 1 :(得分:0)
问题在于TFS如果检测到stdout重定向则使用'/ noprompt'执行。 通过设置环境变量TFS_IGNORESTDOUTREDIRECT = 1来解决问题。