Cruise Control .NET:使用cb:define with multiple parameters

时间:2012-10-23 20:18:41

标签: .net build cruisecontrol.net

这个问题非常烦人,我现在已经抨击了几个小时。我想要做的是使用CCNet中的配置预处理器来创建一个在CCNet中调用任务的XML元素。我认为我从根本上误解了一些事情。

我现在拥有的是这样的:

 <cruisecontrol xmlns:cb="urn:ccnet.config.builder">

         <cb:define name="myBuild">
            <devenv>
                <solutionfile>"$(projPath)"</solutionfile>
                <configuration>"$(releaseMode)"</configuration>
                <buildtype>Rebuild</buildtype>
                <executable>C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe</executable>
                <buildTimeoutSeconds>2400</buildTimeoutSeconds>
                <version>VS2008</version>   
            </devenv>
        </cb:define>

然后使用它,我在一个项目中执行以下操作:

<cb:myBuild projPath="C:\sample.sln" releaseMode="Release" />

我得到的错误是

[CCNET服务器:错误]内部错误:引用未知符号&#39; releasemode&#39;

然后是ThoughtWorks的一大堆痕迹。

我的主要困惑在于为什么&#34; $(projPath)&#34;在定义工作正常,但&#34; $(releaseMode)&#34;才不是。实际上,如果我删除对&#34; releaseMode&#34;的所有引用。在项目中,CCNet接受脚本甚至构建它们。但是,它并不起作用,因为并非所有解决方案都有&#34;发布&#34;模式,有些是特别命名的(出于某种原因,不要问我)。

对于正在发生的事情提供任何帮助,或者更重要的是,如何解决这个问题将不胜感激。

我正在运行1.8.2版本。此外,我们确实计划将实际的构建脚本移动到NANT,但这是我们构建过程的漫长道路上的第一步。

1 个答案:

答案 0 :(得分:2)

我从您的部件构建了一个简单的配置文件,但它完美无缺:

<cb:define name="myBuild">
  <devenv>
    <solutionfile>"$(projPath)"</solutionfile>
    <configuration>"$(releaseMode)"</configuration>
    <buildtype>Rebuild</buildtype>
    <executable>C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe</executable>
    <buildTimeoutSeconds>2400</buildTimeoutSeconds>
    <version>VS2008</version>   
  </devenv>
</cb:define>

<project name="a">
  <tasks>
    <cb:myBuild projPath="C:\sample.sln" releaseMode="Release" />
  </tasks>
</project>

不知何故,我怀疑服务器上的任何其他配置设置都出现了错误。

如果您尚未使用CCValidator.exe,请简化故障排除。这样你就可以减少潜在的问题来源。您可以在CruiseControl.NET\server文件夹中找到它。尝试在其中打开配置文件,看它是否显示任何错误。

如果是,请尝试注释掉或删除配置的所有部分,使其尽可能小,同时仍然可以重现问题。如果您仍然无法解决问题,请将该配置发布给其他人进行查看。