1

我继承了一个构建失败的现有项目。我可以在 ccnet.log 文件中看到异常:

Exception: System.Xml.XmlException: Name cannot begin with the '%' character, hexadecimal value 0x25. Line 17, position 100.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
   at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
   at System.Xml.XmlTextReaderImpl.ParseQName(Boolean isQName, Int32 startOffset, Int32& colonPos)
   at System.Xml.XmlTextReaderImpl.ParseElement()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
   at ThoughtWorks.CruiseControl.Core.Util.XmlFragmentWriter.WriteNode(XmlReader reader, Boolean defattr)
   at ThoughtWorks.CruiseControl.Core.Util.XmlFragmentWriter.WriteNode(String xml)

知道这是哪个 xml 文件,我该如何修复它?恼人的事情是构建变成红色,但它没有被添加到最近的构建网页中。

编辑让我澄清一下:这发生在构建结束时,可能是在它尝试生成构建报告 xml 或其他东西时(我禁用了所有合并发布者)

4

4 回答 4

1

ccnet.config由于堆栈框架,我不确定这是您的文件:

System.Xml.XmlWriter.WriteNode

...我不相信 CC.NET 会写回自己的ccnet.config文件。这可能发生在构建过程中,不是吗?

很难从堆栈跟踪中准确地说出它使用的是什么文件。是否有更多来自更高层的堆栈帧?

无论 XML 文件是什么,问题都在第 17 行第 100 行。

如果您正在使用统计信息,您可能会发现此问题是由统计信息文件引起的。就像我说的,没有更完整的堆栈跟踪很难说。

有时,如果磁盘已满,统计文件可能会损坏。您可能必须进入并手动更正 XML 文件的尾部,确保正确关闭所有元素。

编辑

我突然想到这个问题可能与发布者步骤合并文件有关。在您的ccnet.config文件中,有一个步骤发生在构建结束时,CC 将几个文件(通常是 XML 文件)合并在一起,并创建一个更大的 XML 文档,从中生成 Web 仪表板。我的猜测是您正在合并的文件之一包含这个虚假字符,并且合并步骤失败了。

在我的配置文件中,有问题的步骤如下所示:

<publishers>
  <merge>
    <files>
      <file>E:\Blah\Cruise Reports\*.xml</file>
    </files>
  </merge>
  ....

查看该文件夹并检查%不应该出现的字符。也许您正在吸入某种根本不是 XML 的文件。

于 2009-02-27T11:46:27.383 回答
1

终于设法找到了问题:构建使用 Nant 完成了大部分任务,并且 Nant 配置不正确:

  • 它被配置为记录所有调试信息
  • log4net 被配置为在 nant.exe.config 的 <> 括号中记录一些内容

因此,当 ccnet 尝试将 nant 输出与构建输出合并时,构建失败了。

非常感谢大家的帮助!

于 2009-03-04T10:38:53.667 回答
0

很可能是 CC.NET 安装目录中的ccnet.config

于 2009-02-27T11:43:08.530 回答
0

需要注意的一件事 - 如果您在巡航控制项目中指定构建任务,则不必专门告诉它合并输出 - 它会自动处理。一种调试方法是首先注释掉除第一个任务之外的所有任务。如果该构建成功,请取消注释下一个任务并重试。您最终会发现失败的任务并可以从那里继续调试。

于 2009-03-02T21:47:30.283 回答