如何使用VST将变量传递给MSBuild

如何使用VST将变量传递给MSBuild,msbuild,azure-devops,azure-pipelines,azure-pipelines-build-task,Msbuild,Azure Devops,Azure Pipelines,Azure Pipelines Build Task,我用Teamcity用户的眼光来看待VSTS构建。我想设置多个生成,每个生成都有一组相同的参数供MSBuild使用。例如,我希望我的所有构建共享该参数 我知道我可以在我设置的每个构建配置中手动写出/p:createHardLinksforcOpyFilesOutputDirectoryIffailable=true,但我更愿意使用变量系统设置一次。但是,当我使用变量编辑器设置变量时,VSTS代理会将变量名转换为大写以及转换。到u和其他转换,这意味着msbuild没有查看它们,它希望的是正确的Pa

我用Teamcity用户的眼光来看待VSTS构建。我想设置多个生成,每个生成都有一组相同的参数供MSBuild使用。例如,我希望我的所有构建共享该参数

我知道我可以在我设置的每个构建配置中手动写出/p:createHardLinksforcOpyFilesOutputDirectoryIffailable=true,但我更愿意使用变量系统设置一次。但是,当我使用变量编辑器设置变量时,VSTS代理会将变量名转换为大写以及转换。到u和其他转换,这意味着msbuild没有查看它们,它希望的是正确的PascalCased版本。我已经通过在构建期间回显所有当前环境变量来验证了这一点。我看不到任何关于为什么会发生这种情况的文档


是否存在通过变量系统传递MSBuild参数的模式?

对于VSTS变量名,它不区分大小写。您只需要关注变量的值

例如,如果变量tHisIsMixEdCase的值为/p:CreateHardLinksForcyFilesOutputDirectoryIffailable=true

然后,无论在MSBuild arguments选项中使用$THISISMIXEDCASE还是$THISISMIXEDCASE,它们的工作原理都与直接使用/p:createHardLinksForcyFilesOutputDirectoryIffailable=true相同


我是不是遗漏了什么,你就不能这样做吗/p:CreateHardLinksForcyFilesOutputDirectory(如果可能)=$CreateHardLinksForCopyFilesToOutputDirectoryIfPossible@raterus你说得对,我当然可以。然而,这意味着我不能在VSTS中配置变量组来为我的所有构建设置一些公共属性。与我在Teamcity的习惯相比,这似乎是一个惊人的冗余量。当然,我可以重构大多数msbuild脚本,使其参数为大写;但这是一个黑客程序,对于预定义的参数仍然不起作用。我仍然不太明白您遇到了什么问题。虽然我理解VSTS如何重命名变量名,但我不确定这对您的影响。如果需要所有构建的公共参数,可以定义一个变量,即SharedBuildValues,其值为/p:Prop1=abc/p:Prop2=xyz/p:Prop=123。然后,在构建定义/MSBuild参数中,您只需将$SharedVariables与硬编码参数放在一起。能否附上您已配置和/或遇到问题的屏幕截图?在我的VSTS实例中,我可以毫无问题地设置它。@PatterMister因为您实际使用的是值的值,即使变量名不区分大小写,您只需要确保值是您所需要的。我在答案中添加了详细信息,您可以试一试。