2012-02-02 50 views
5

将预处理器常量“传递”到CC.NET中预定义块的首选方式是什么?使用CruiseControl.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> 

我可以传递项目名常数有两种方式:

  1. 使用CB:范围

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

    <cb:ProjectBlock ProjectName="FooProject" /> 
    

他们都工作正常和内ProjectHeaderBlock与适当项目名值初始化。

这两个选项有什么不同吗?哪一个更好/更高效?

回答

4

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

我用scope定义了预处理器常量来设置默认值,如果需要的话我会覆盖它。

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

+0

谢谢,很高兴知道这个覆盖bevahiour – 2012-02-03 08:10:38