【问题标题】:Conditional Prebuild Event Commands条件预构建事件命令
【发布时间】:2018-07-01 00:28:37
【问题描述】:

背景

目前我在本地构建解决方案时运行预构建命令。但是,在我的 VSTS 持续集成服务器上构建时不需要此命令。

问题

有没有办法在本地机器上构建时只运行预构建事件命令?

我知道您可以添加如下条件语句。但是有什么可以区分它是本地构建还是 CI 构建?

if $(ConfigurationName) ==  Local 

【问题讨论】:

    标签: continuous-integration visual-studio-2017 azure-devops pre-build-event


    【解决方案1】:

    在 VSTS 中使用 Visual Studio build 任务时,您可以从任务配置中传递 MSBuild 参数。这样您就可以定义自己的自定义属性,例如RunsOnCI,并将其默认为false。然后,您可以在构建定义中将其设置为 true

    假设您在预构建事件中有以下代码:

    if $(BuiltOnCI) == true (
        echo "Hello World!"
    )
    

    然后您需要编辑您的 .csproj 文件并添加带有默认值的 BuiltOnCI 属性:

    <PropertyGroup>
        ...
        <BuiltOnCI>false</BuiltOnCI>
    </PropertyGroup>
    

    您可以通过在命令行上运行 MSBuild 来测试您的更改。像这样运行它不会显示 Hello World 消息:

    msbuild myproject.csproj
    

    在命令行传递参数可以让你设置为true:

    msbuild StackoverflowSample.csproj /p:BuiltOnCi=true
    

    现在它可以在本地运行,您可以使用 /p:BuiltOnCi=true 并将您的 VSTS 任务放入 MSBuild 参数字段中。

    【讨论】:

    • 你能在这方面再扩展一点吗?我想我理解逻辑,只是不知道在哪里设置所有组件。我在 VSTS 的 MSBuild Arguments 中附加了/p:BuiltOnCI=true,并在我的解决方案的预构建事件中设置了这个条件。if "$(BuiltOnCI)" != true
    • @DanCundy 我已经用示例更新了我的帖子。这行得通吗?
    • 效果很好,谢谢。使用预构建语法有点挣扎,但最终到达了那里。
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多