无法读取从控制台应用程序重定向的完整输出 - SVN更新自动化

时间:2014-11-19 12:59:09

标签: c# .net svn console

我正在尝试使用控制台应用程序自动执行svn更新的更新过程。我使用下面的代码。

ProcessStartInfo svnUpdate = new ProcessStartInfo();
svnUpdate.Arguments =  string.Format("update \"{0}\" -r {1}", destination,  revisionNo);
svnUpdate.FileName = "svn.exe";
svnUpdate.CreateNoWindow = true;
svnUpdate.UseShellExecute = false;
svnUpdate.WindowStyle = ProcessWindowStyle.Hidden;
svnUpdate.RedirectStandardOutput = true;
svnUpdate.RedirectStandardError = true;

Process p = new Process();
p.StartInfo = svnUpdate;
p.EnableRaisingEvents = true;
p.Start();
svnOutPut = p.StandardOutput.ReadToEnd();
p.WaitForExit();

if (p.HasExited)
{
Console.WriteLine("Received Output Test : " + svnOutPut);
}
p.Close();
p.Dispose();

如果update命令没有返回错误,上面的代码可以正常工作。如果有一些错误,我只能返回outpput的第一行,但是当我在控制台下面设置代码时,会给我一个完整的错误文本。

svnUpdate.RedirectStandardOutput = false;
svnUpdate.RedirectStandardError = false;

当我将重定向设置为false时,示例输出为outpput。

Updating 'C:\TestSvnRepo':
svn: E175002: Unable to connect to a repository at URL 'http://svnrepositoryAdd/svn/TestSvnRepo'
svn: E175002: Unexpected HTTP status 500 'Internal Server Error' on '/svn/TestSvnRepo'

svn: E720003: Additional errors:
svn: E720003: Could not open the requested SVN filesystem

当我重定向到True时,以字符串形式收到示例输出。

Updating: 'C:\TestSvnRepo':

1 个答案:

答案 0 :(得分:0)

我相信您错过的输出是通过STDERR发送的,而不是STDOUT。在您的代码中,您只需查看STDOUTsvnOutPut = p.StandardOutput.ReadToEnd();

您还需要阅读STDERR - p.StandardError.ReadToEnd();

顺便说一句,我建议不要自动svn.exe并添加应用程序和环境依赖项(IOW,您的应用程序要求系统上存在svn.exe并且%PATH%或您指定的已知绝对路径中),使用SharpSVN提供SVN API本身的.NET实现。