这个问题很烦人,我已经反对它几个小时了。我想要做的是使用 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,但这是我们构建过程漫长道路上的第一步。
最佳答案
我从您的部分构建了一个简单的配置文件,但它可以完美运行:
<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
中找到它文件夹。尝试打开其中的配置文件,看看它是否显示任何错误。如果是这样,请尝试注释掉或删除配置的所有部分,使其尽可能小,同时仍然重现问题。如果还是不能解决,把那个配置贴出来让大家看看。
关于.net - 巡航控制.NET : using cb:define with multiple parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038559/