我有一个 Azure DevOps 管道,用于构建和部署适用于 Viso 的 Visual Studio Tools for Office (VSTO) 插件。根据分支,我希望将
InstallUrl
自定义为 MSBuild 发布任务的一部分。为此,我编写了一个 YAML 表达式,可以根据下面的每个 YAML 片段有条件地设置 msbuildArguments
。
当管道运行时,我可以看到表达式没有按预期执行,因为
msbuildArgumentProduction
始终被选中。在查看了 MS doco 后,我无法理解出了什么问题。
stages:
- stage: build
variables:
isProduction: $[eq(variables['Build.SourceBranch'], 'refs/heads/production')]
isDevelopment: $[eq(variables['Build.SourceBranch'], 'refs/heads/development')]
solution: '**/ModelGenVisioAddIn.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
msbuildArgumentDevelopment: '-v:d /t:publish /property:InstallUrl=https://exampleDev1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'
msbuildArgumentProduction: '-v:d /t:publish /property:InstallUrl=https://exampleProd1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'
jobs:
- job: build_job
pool:
vmImage: 'windows-latest'
steps:
- task: MSBuild@1
displayName: 'Publishing ModelGen for Visio (MG4V)'
inputs:
solution: '$(solution)'
configuration: '$(buildConfiguration)'
${{ if eq(variables.isDevelopment, true) }}:
msbuildArguments: '$(msbuildArgumentDevelopment)'
${{ else }}:
msbuildArguments: '$(msbuildArgumentProduction)'
如有任何建议/帮助,我们将不胜感激
表达式 '
${{ xxxx }}
' 在运行时之前的编译时处理,表达式 '$[xxxx]
' 在编译时之后在运行时处理。请参阅“了解变量语法”。
所以,当编译时处理条件表达式'
${{ if eq(variables.isDevelopment, true) }}
'时,'isDevelopment
'变量的值并没有被扩展。
对于您的情况,您可以更改条件表达式,如下所示:
stages:
- stage: build
variables:
isProduction: $[eq(variables['Build.SourceBranch'], 'refs/heads/production')]
isDevelopment: $[eq(variables['Build.SourceBranch'], 'refs/heads/development')]
solution: '**/ModelGenVisioAddIn.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
msbuildArgumentDevelopment: '-v:d /t:publish /property:InstallUrl=https://exampleDev1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'
msbuildArgumentProduction: '-v:d /t:publish /property:InstallUrl=https://exampleProd1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'
jobs:
- job: build_job
pool:
vmImage: 'windows-latest'
steps:
- task: MSBuild@1
displayName: 'Publishing ModelGen for Visio (MG4V)'
inputs:
solution: '$(solution)'
configuration: '$(buildConfiguration)'
${{ if eq(variables['Build.SourceBranch'], 'refs/heads/development') }}:
msbuildArguments: '$(msbuildArgumentDevelopment)'
${{ else }}:
msbuildArguments: '$(msbuildArgumentProduction)'