通过Powershell运行时,MSBuild失败

时间:2009-06-17 04:07:50

标签: powershell msbuild

我有一个MSBuild脚本,我希望从PowerShell脚本中调用它作为部署过程的一部分。如果我通过bat文件调用构建脚本一切正常。如果我在PowerShell中做同样的事情我会得到CS1668错误,寻找在我的机器上不存在的奇妙和美妙的路径。 我知道我正在进入MSBuild脚本,因为这些错误是从MSBuild脚本目标中发生的(日志记录输出显示了这一点)。 bat文件和PowerShell脚本位于构建脚本旁边的相同位置。

错误:

  

错误CS1668:警告为错误:   搜索路径“C:\ Program”无效   Files \ Microsoft Visual Studio   在'LIB中指定的8 \ VC \ AtlMfc \ Lib'   环境变量' - '系统   找不到指定的路径。 “   错误CS1668:警告为错误:   搜索路径“C:\ Program”无效   Files \ Microsoft Visual Studio   8 \ VC \ PlatformSDK \ Lib'中指定   'LIB环境变量' - '   系统找不到指定的路径。   “

我已经检查过,我的机器上不存在这些路径。 为什么从PowerShell运行会改变MSBuild寻找的路径?

提前致谢

RhysC

编辑 - 添加代码:NB MSBuild脚本的名称是AutomatedDebug.build POWERSHELL SCRIPT:

#Begining of script
$CurrentPath = Split-Path (Split-Path $myinvocation.mycommand.path )
#Assign the Build script paths. 1 is for building and testsing, 1 is for deployment (to keep things clean)
$MSBuildScriptBuildAndTestPath = $CurrentPath + "\Tools\AutomatedDebug.build"
$MSBuildScriptDeployPath = $CurrentPath + "\Tools\Deploy.build"

#Run the automated build with tests
Write-Host "*** Run the automated build with tests ***" 
C:\Windows\Microsoft.NET\Framework\v3.5\MSbuild.exe $MSBuildScriptBuildAndTestPath "/t:AllTests" "/l:FileLogger,Microsoft.Build.Engine;logfile=AllTests.log"
if($LastExitCode -ne 0)
{
    throw "AllTests failed"
}
Write-Host "*** FINISHED: Run the automated build with tests ***" 

Bat文件

@C:\Windows\Microsoft.NET\Framework\v3.5\MSbuild.exe AutomatedDebug.build /t:AllTests /l:FileLogger,Microsoft.Build.Engine;logfile="AllTests.log"
@pause
enter code here

3 个答案:

答案 0 :(得分:2)

好的,实际发生的事情是我已经在很多个月前下载了Powershell社区扩展(http://pscx.codeplex.com),并且有一个Environment.VisualStudio2005.ps1文件,其中添加了不存在的EnvVars。这是(我假设)因为我不使用VS2005。我已经把这个提出来了,一切都很顺利。我试图寻找2008年的等值,但是运气太多了。说实话,我不会使用powershell充分发挥其潜力,所以我怀疑我甚至还需要在我的机器上使用PSCX。

谢谢你的帮助。

答案 1 :(得分:0)

这很可能是由于您将参数传递到MSBuild脚本的方式。 CMD和PowerShell之间存在一些关键参数解析差异,并且通过使用批处理文件,您隐式使用CMD的参数解析引擎将参数传递给MSBuild。如果你发布了你正在使用的命令行,那么这里的一个PowerShell大师可能会帮助调试参数混淆的地方。

答案 2 :(得分:0)

我很想知道,基本上你在这里得到“警告错误”。您可以尝试关闭处理警告作为错误(我的意思是,有一个不存在的lib路径不会发出 对我不好)或者你会让你的脚本分别打印出来环境变量(分别使用echo %LIB%$Env:LIB)从脚本中查找差异。

但是,由于默认情况下没有全局设置VS的envvars(这就是为什么有三个Visual Studio命令提示),您必须在某处设置所有变量。如果您在脚本中执行此操作,可能会在某处出现错字?

相关问题