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

eventhandlers 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 に答える