1

我们有一些测试在某些文件上执行 powershell 脚本,以确保脚本正确处理文件。

这是一个例子:

    [TestMethod]
    [DeploymentItem(@"BuildScripts\CheckForFxCop.ps1")]
    [DeploymentItem(@"TestData\TestWithIncorrectFxCop\TestWithIncorrectFxCop.csprojext", "TestWithIncorrectFxCop")]
    public void WhenFxCopHasWrongValueFails()
    {
        string projectFileToTest = Path.Combine(Directory.GetCurrentDirectory(), "TestWithIncorrectFxCop", "TestWithIncorrectFxCop.csprojext");
        string scriptFileToExecute = Path.Combine(Directory.GetCurrentDirectory(), "CheckForFxCop.ps1");
        ProcessStartInfo startInfo = new ProcessStartInfo
        {
            FileName = "powershell.exe",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = false
        };
        startInfo.Arguments = string.Format(@"& '{0}' '{1}' csprojext", scriptFileToExecute, projectFileToTest);

        var process = new Process { StartInfo = startInfo };
        process.Start();

        ... assert some stuff...
    }

这些测试已经在构建服务器上运行了 9 个月。

我们最近在一台服务器上安装了 powershell 3,这使得所有这些测试都失败了:

System.ComponentModel.Win32Exception: The system cannot find the file specified

process.Start()在线上。

我们暂时停止了在该服务器上运行的测试,只使用了未安装 powershell 3.0 的服务器。

我们最近在其他构建服务器上安装了 AzureSDK 2.1,现在我们在所有服务器上都遇到了同样的问题。

如果我们以构建代理用户身份登录构建机器并手动启动 powershell 并运行测试正在运行的命令,它似乎成功了。

有谁知道现在可能导致这些测试失败的原因是什么?或者对我们如何诊断问题有任何想法?

4

2 回答 2

0

您是否尝试过将完全限定的路径传递给startInfo.FileName而不只是 Powershell.exe,以防%PATH%更新后出现问题

完全猜测,但是您有任何机会遇到 FileSystemRedirector 32 vs. 64 问题,如本答案中所示 - Process.Start(): The system cannot find the file specified, but my file path appears to be legit

于 2013-09-05T13:24:02.630 回答
0

所以看起来这个问题与

CreateNoWindow = false

我们有一些其他测试将其设置为 true 并且成功,并且将它们作为构建代理帐户运行(或者构建代理更可能作为服务运行的事实)意味着它们失败了,不确定为什么文件没有发现是错误。

无论如何,我认为问题解决了。

于 2013-09-06T13:20:11.677 回答