我有一套测试DLL,它是通过Start-Process
命令调用OpenCover.Console.exe的powershell脚本运行的。
我有-returntargetcode
标志设置
执行后,我检查$lastexitcode
和$?
。他们一直分别返回1和True。即使测试失败。
$lastexitcode
不应该$lastexitcode
当所有的测试通过时为0,当它们失败时为1?
我有一套测试DLL,它是通过Start-Process
命令调用OpenCover.Console.exe的powershell脚本运行的。
我有-returntargetcode
标志设置
执行后,我检查$lastexitcode
和$?
。他们一直分别返回1和True。即使测试失败。
$lastexitcode
不应该$lastexitcode
当所有的测试通过时为0,当它们失败时为1?
默认情况下,Start-Process
是异步的,所以它不会等待您的进程退出。如果希望您的命令行工具同步运行,请删除Start-Process
并直接调用该命令。这是它设置$LASTEXITCODE
的唯一方法。例如,造成的CMD.exe退出以2:
cmd /c exit 2
$LASTEXITCODE
您可以通过添加-Wait
标志使Start-Process
synchonous,但它仍然不会”设置$ LASTEXITCODE。要从Start-Process获得ExitCode,您需要将-PassThru
添加到您的Start-Process
,然后输出[System.Diagnostics.Process]
对象,您可以使用该对象监视该流程,并(最终)访问其ExitCode
属性。这里有一个例子,应该帮助:
$p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait
$p.ExitCode
当然,这种做法的好处是,你并不需要等待的过程,但后来当它离开你有关于它在$p
运行信息。
这是-PassThru为我修好了!谢谢 – lucas