1

在 C# 中针对 System.Diagnostics.Process 工具编写代码时,我只捕获 StandardOutput 并对其进行解析。但是,围绕此问题的单元测试在构建服务器上失败了。在一位同事尝试了他的机器后,它也失败了。

然后我找到了Jon Skeet对一个问题的回答,即为什么 StandardOutput 为空,他提到从 System.Diagnostics.Process 捕获 StandardOutput 和 StandardError。果然,我们在我同事的机器上试过了,它奏效了。

我的问题是,为什么我的机器上的 StandardOutput (stdout) 被写入我同事的机器和我们的构建服务器上的 StandardError (sterr)?是否存在强制这种行为的环境设置?

4

1 回答 1

2

事实证明,我调用的命令 sqlcmd.exe 在我同事的机器和构建机器上使用的是 SQL Server 2008 (c:\Program Files\Microsoft SQL Server\100\Tools\Binn) 版本,但 SQL Server我机器上的 2012 (c:\Program Files\Microsoft SQL Server\110\Tools\Binn) 版本。将路径变量更改为指向我机器上的 SQL Server 2008 版本有效。

当您运行的 .sql 脚本花费的时间超过 sqlcmd.exe -t, query timeout, parameter 设置时,“Timeout expired”消息被写入 SQL Server 2012 的 sqlcmd.exe 中的 stdout 而不是 stderr 可能会很有趣到。

于 2013-10-10T16:58:38.993 回答