【问题标题】:CruiseControl.Net complaining about xmlCruiseControl.Net 抱怨 xml
【发布时间】:2009-02-27 11:40:52
【问题描述】:

我继承了一个构建失败的现有项目。我可以在 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 或其他东西时(我禁用了所有合并发布者)

【问题讨论】:

  • 你有什么收获吗?

标签: .net continuous-integration cruisecontrol.net build-server


【解决方案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 的文件。

【讨论】:

  • 不幸的是,这是我收到的唯一错误消息 :(。那么我应该尝试查看哪些文件?统计文件在哪里?我可以查看的其他文件吗?
  • 在我的构建中,统计信息存储在一个名为 report.xml 的文件中,它存储在构建日志的父文件夹中。尝试打开该文件并查看它在尾部的外观。另外,如果您有多个构建,那么所有构建都会发生这种情况吗?
  • 嗨,我终于明白了! (见我的回复)虽然我花了很长时间才找到,但 CCNet 可能会给出一些更有意义的错误。
【解决方案2】:

终于找到了问题:构建使用 Nant 完成了大部分任务,并且 Nant 配置错误:

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

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

非常感谢大家的帮助!

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      很可能 ccnet.config 在 CC.NET 安装目录中。

      【讨论】:

      • 尝试在 ccnet.config 中定位第 17 行,位置 100
      • 我真的不认为它的ccnet.config,因为这个错误发生在构建结束时(对不起,我将它添加到问题中)
      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2012-01-28
      • 2011-11-14
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2013-01-16
      相关资源
      最近更新 更多