在Azure Devops中从命令行任务运行MSBuild

问题描述 投票:2回答:3

我正在尝试在Azure Devops上执行msbuild。因此我不能使用提供的MSBuild任务。

当我使用命令行任务时,无法识别该命令。在我的本地机器上,我在使用vcvarsall.bat之前加载msbuild。但我一直无法弄清楚如何在Azure Devops中获取该路径。似乎也不是Azue Devops的Develop Command Prompt任务。

关于如何从命令行任务或批处理脚本任务使用msbuild的任何想法?使用他们的托管VS代理。

msbuild azure-devops azure-pipelines azure-devops-hosted-agent
3个回答
2
投票

如果您使用Hosted Agent 2017,则可以通过以下方式从命令行任务运行msbuild.exe

命令行版本1:enter image description here

命令行版本2:

enter image description here

结果:

enter image description here


1
投票

如果您有兴趣了解内置Microsoft任务如何解析路径,则所有Azure Devops任务都是开源的。这些是你可能会关注的path functions


1
投票

以支持的方式执行此操作的最佳方法是使用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的语法。

© www.soinside.com 2019 - 2024. All rights reserved.