使用CruiseControl.NET预处理器将常量传递给预定义块

时间:2012-02-02 12:49:49

标签: .net cruisecontrol.net

在CC.NET中将预处理器常量“传递”到预定义块的首选方法是什么?

假设我有以下声明:

<cb:define name="ProjectHeaderBlock">
    <name>$(ProjectName)</name>
    <workingDirectory>C:\MyProjects\$(ProjectName)</workingDirectory>
</cb:define>

<cb:define name="ProjectBlock">
    <project>
        <cb:ProjectHeaderBlock />

        <triggers />
        <tasks />
        <publishers />
    </project>
</cb:define>

我可以通过两种方式传递 ProjectName 常量:

  1. 使用cb:scope

    <cb:scope ProjectName="FooProject" >
        <cb:ProjectBlock />
    </cb:scope>
    
  2. 直接传递声明

    <cb:ProjectBlock ProjectName="FooProject" />
    
  3. 它们都正常工作,内部 ProjectHeaderBlock 已使用正确的 ProjectName 值进行初始化。

    这两个选项之间有什么区别吗?哪一个更好/更有效?

1 个答案:

答案 0 :(得分:4)

你是对的:他们同时工作。我所知道的唯一功能差异是scope元素中定义的预处理器容量是可覆盖的,即它们可能会在以后重新定义。

我使用scope定义的预处理器常量来设置我必须覆盖的默认值。

我个人更喜欢第二个版本,因为它避免了在你的xml中嵌套。