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

本文关键字:输出 SVN 自动化 更新 读取 控制台 重定向 应用程序 | 更新日期: 2023-09-27 18:31:03

我正在尝试使用控制台应用程序自动执行 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();

如果更新命令没有返回任何错误,则上面的代码工作正常。如果有一些错误,我只能返回输出的第一行,但是当我在控制台下方设置代码时,会给我完整的错误文本。

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

当我将重定向为 false 时的示例输出。

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':

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

我相信

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

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

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