4

这个问题很烦人,我已经反对它几个小时了。我正在尝试做的是使用 CCNet 中的配置预处理器来创建一个 XML 元素,该元素调用 CCNet 中的任务。我想我从根本上误解了一些东西。

我现在拥有的是这样的:

 <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 服务器:错误] 内部错误:引用未知符号 'releasemode'

然后是 ThoughtWorks dll 的巨大堆栈跟踪。

我的主要困惑在于为什么定义中的“$(projPath)”可以正常工作,但“$(releaseMode)”却不行。事实上,如果我删除项目中对“releaseMode”的所有引用,CCNet 会接受脚本,甚至构建它们。但是,它不起作用,因为并非我们所有的解决方案都具有“发布”模式,有些是专门命名的(出于某种原因,不要问我)。

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

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

4

1 回答 1

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文件夹中找到它。尝试打开其中的配置文件,看看它是否显示任何错误。

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

于 2012-10-26T19:41:26.550 回答