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

Mac*_*iak 5 .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>
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用cb:scope

    <cb:scope ProjectName="FooProject" >
        <cb:ProjectBlock />
    </cb:scope>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接通过声明

    <cb:ProjectBlock ProjectName="FooProject" />
    
    Run Code Online (Sandbox Code Playgroud)

它们都正常工作,内部ProjectHeaderBlock使用正确的ProjectName值进行初始化.

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

The*_*man 4

你是对的:它们都起作用。我知道的唯一功能差异是scope元素中定义的预处理器内容是可重写的,即它们可以稍后重新定义。

我使用scope定义的预处理器常量来设置默认值,如有必要,我会覆盖这些默认值。

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