我正在尝试从一个简单的控制台应用程序调用 MSTest.exe,该应用程序是从 SVN 预提交挂钩内部执行的。
如果我使用 TortoiseSVN 来提交,它会自动运行下面的控制台应用程序代码。
(跳过代码,看看会发生什么......)
// 代码
static void Main(string[] args)
{
string testPath = @"C:\Users\myname\Documents\SVN\Test\bin\Debug\TestProject1.dll";
string mstest = GetMSTestOutput(testPath);
if (mstest != null)
{
Console.Error.WriteLine(mstest);
Environment.Exit(1); // I WANT it to stop here, so I can see output while testing
}
}
private static string GetMSTestOutput(string testPath)
{
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
FileName = @"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
Arguments = String.Format("/testcontainer:{0}", testPath)
};
Process process = Process.Start(processStartInfo);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return output;
}
// 输出
这是我在 TortoiseSVN 窗口中看到的:
错误:提交失败(详细信息如下):
错误:提交被预提交挂钩(退出代码 1)阻止,输出:
错误:Microsoft (R) 测试执行命令行工具版本 10.0.30319.1
错误:版权所有 (c) Microsoft Corporation。版权所有。
错误:
错误:文件
错误:“C:\Users\myname\Documents\SVN\Test\bin\Debug\TestProject1.dll”
错误:未找到。
所以你可以看到我正确地调用了 MSTest,但它声称路径是错误的。
但是,如果我手动打开 VS 命令提示符并键入完全相同的路径,则代码运行时不会出错。
我究竟做错了什么?