为什么在使用MSBuild构建失败后,PowerShell的$ LastExitCode变量始终为0?

时间:2011-04-09 07:49:03

标签: powershell msbuild

我注意到当MSBuild失败时,$ LastExitCode变量的值始终为0.我在Windows 7上,使用MSBuild v4.0和PowerShell 2.0。这是我的MSBuild scritpt:

<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Fail">
    <Target Name="Fail">
        <Error />
    </Target>
</Project>

当我跑步时:

msbuild.exe MyProject.csproj

我可以在输出中看到MSBuild失败,但当我检查$LastExitCode时,它的值为0.任何人都知道可能会发生什么?

我尝试将$(ErrorActionPreference)设置为Stop,但这不起作用。我重新打开了一个新的PowerShell窗口,它也无效。

2 个答案:

答案 0 :(得分:11)

我最近遇到了一个问题。事实证明,我的个人资料中的一些代码正在更新$ lastexitcode-代码是一个自定义提示生成器。尝试使用“powershell -noprofile”在没有您的个人资料的情况下运行powershell,以查看问题是否可能是您个人资料中的代码。

考虑检查值$?
如果$ lastexitcode非零,那就错了......即使$ lastexitcode没有,它也适用于我。

答案 1 :(得分:1)

$ LASTEXITCODE适用于win32可执行文件和$?用于PS命令。从cmd运行msbuild.exe时%errorlevel%的值是多少?

如果您想了解更多关于这两个特殊变量之间的差异,请阅读http://techibee.com/powershell/what-is-lastexitcode-and-in-powershell/1847