【发布时间】:2018-02-05 12:54:11
【问题描述】:
我正在以 Teamcity 用户的眼光看待 VSTS Build。我想设置多个构建,每个构建都有相同的参数集供 MSBuild 使用。例如,我希望我的所有构建共享 CreateHardLinksForCopyFilesToOutputDirectoryIfPossible 参数。
我知道我可以在我设置的每个构建配置中手动写出/p:CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=true,但我更愿意使用变量系统设置一次。但是,当我使用变量编辑器设置变量时,VSTS 代理将变量名转换为大写(以及将“.”转换为“_”和其他转换),这意味着 msbuild 不会t 看它们(它期待正确的 PascalCased 版本)。我已经通过在构建期间回显所有当前环境变量来验证这一点。我看不到任何关于为什么会发生这种情况的文档。
是否有通过变量系统传递 MSBuild 参数的模式?
【问题讨论】:
-
我错过了什么吗,你就不能这样做吗? /p:CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)
-
@raterus 你是对的,我当然可以。但是,这意味着我无法在 VSTS 中配置变量组来为我的构建设置 all 的一些通用属性。与我在 Teamcity 中习惯的相比,这似乎是令人惊讶的冗余量。我当然可以重构我的大多数 msbuild 脚本,使其参数为大写;但这是一个 hack,仍然不适用于预定义的参数。
-
我还是不太明白你遇到了什么问题。我了解 VSTS 如何重命名变量名,但我不确定在这种情况下这对您有何影响。如果您想要所有构建的通用参数,您可以定义一个变量,即 SharedBuildValues,其值为“/p:Prop1=abc /p:Prop2=xyz /p:Prop=123”。然后在您的构建定义/MSBuild 参数中,您只需将 $(SharedVariables) 放在“硬编码”参数旁边。
-
您能否附上您已配置的内容和/或您遇到的问题的屏幕截图?我能够在我的 VSTS 实例中毫无问题地进行设置。
-
@pattermeister 由于您实际使用的是值的值,即使变量名不区分大小写,您只需要确保该值是您需要的。我在答案中添加了详细信息,您可以尝试一下。
标签: msbuild azure-devops azure-pipelines azure-pipelines-build-task