我正在尝试在Azure Devops上执行msbuild
。因此我不能使用提供的MSBuild
任务。
当我使用命令行任务时,无法识别该命令。在我的本地机器上,我在使用vcvarsall.bat
之前加载msbuild
。但我一直无法弄清楚如何在Azure Devops中获取该路径。似乎也不是Azue Devops的Develop Command Prompt
任务。
关于如何从命令行任务或批处理脚本任务使用msbuild
的任何想法?使用他们的托管VS代理。
如果您有兴趣了解内置Microsoft任务如何解析路径,则所有Azure Devops任务都是开源的。这些是你可能会关注的path functions。
以支持的方式执行此操作的最佳方法是使用vswhere
。以下位脚本将安装vswhere(使用chocolatey),然后查询安装程序注册表,其中可以找到msbuild。如果您需要,请将-latest
替换为更具体的版本:
choco install vswhere
for /f "tokens=*" %%i in ('vswhere -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe -nologo') do set msbuildpath="%%i"
echo "##vso[task.setvariable variable=msbuildpath]%msbuildpath%"
这将把msbuild的路径保存到环境变量%msbuildpath%
以及管道变量(对于这个阶段)$(msbuildpath)
。
然后,您可以使用第二个运行命令行任务并传入qazxsw poi,也可以通过调用以下方法从上面提到的同一个脚本调用MsBuild:
$(msbuildpath)
这将确保您的脚本仍然有效,即使Microsoft升级其图像并移动一些东西(确实会发生)。
您还可以从以下位置使用%msbuildpath%
或wget
获取vswhere:
invoke-webrequest -outfile
其他https://github.com/Microsoft/vswhere/releases/latest/download/vswhere.exe
,包括PowerShell的语法。