0

我正在尝试开发一个执行 tfs 合并的控制台应用程序。要执行的命令是:

tf 合并 $/CodeBase/ALPHA $/CodeBase/BETA /recursive /version:C4~C6

当合并操作发生冲突时,首先会引发错误,并在我解决冲突的地方出现解决冲突窗口。在我解决冲突后,将显示最终输出。

执行 tf 合并的控制台应用程序的 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

我相信我正在做异步读取操作(可能是问题)。有没有办法我可以执行同步读取???

4

2 回答 2

0

如果 TFS 检测到标准输出重定向,则问题出在使用“/noprompt”执行的 TFS 上。通过设置环境变量 TFS_IGNORESTDOUTREDIRECT=1 解决了问题。

于 2013-07-23T13:04:38.833 回答
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);
}
于 2013-07-22T12:54:22.293 回答