我正在尝试使用控制台应用程序自动执行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':
答案 0 :(得分:0)
我相信您错过的输出是通过STDERR
发送的,而不是STDOUT
。在您的代码中,您只需查看STDOUT
(svnOutPut = p.StandardOutput.ReadToEnd();
)
您还需要阅读STDERR
- p.StandardError.ReadToEnd();
顺便说一句,我建议不要自动svn.exe
并添加应用程序和环境依赖项(IOW,您的应用程序要求系统上存在svn.exe
并且在%PATH%
或您指定的已知绝对路径中),使用SharpSVN提供SVN API本身的.NET实现。