CruiseControl.Net жалуется на XML - PullRequest
       24

CruiseControl.Net жалуется на XML

1 голос
/ 27 февраля 2009

Я унаследовал существующий проект с ошибочной сборкой. Я вижу исключение в файле 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 ]

1 голос
/ 04 марта 2009

Наконец удалось найти проблему: сборка использовала Nant для выполнения большей части задачи, и Nant был настроен неправильно:

  • Он был настроен на запись всей отладочной информации
  • log4net был настроен на запись чего-либо в <> скобках в nant.exe.config

Итак, сборка не удалась, когда ccnet попытался объединить вывод nant с выводом сборки.

Большое спасибо всем за помощь!

1 голос
/ 27 февраля 2009

Я не уверен, что это ваш ccnet.config файл из-за фрейма стека:

System.Xml.XmlWriter.WriteNode

... Я не верю, что CC.NET записывает обратно в свой ccnet.config файл. Вероятно, это происходит во время сборки, нет?

Трудно сказать точно, какой файл он использует из вашей трассировки стека. Было ли больше стековых фреймов сверху?

Каким бы ни был XML-файл, проблема в строке 17, строке 100.

Вы можете обнаружить, что эта проблема связана с файлом статистики, если вы используете статистику. Как я уже сказал, трудно сказать без более полной трассировки стека.

Иногда файл статистики может быть поврежден, если диск полностью заполнен. Возможно, вам придется войти и вручную исправить хвост файла XML, убедившись, что все элементы закрыты правильно.

EDIT

Мне пришло в голову, что эта проблема, вероятно, связана со слиянием файлов на этапе публикации. В вашем файле ccnet.config есть шаг, который происходит в конце сборки, в которой CC объединяет несколько файлов, обычно файлов XML, и создает один более крупный документ XML, из которого создается веб-панель мониторинга. Я предполагаю, что один из файлов, которые вы объединяете, содержит этот ложный символ, и этап объединения не выполняется.

В моем конфигурационном файле рассматриваемый шаг выглядит примерно так:

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

Загляните в эту папку и проверьте где-нибудь символ %, которого не должно быть. Может быть, вы всасываете какой-то файл, который на самом деле совсем не XML.

0 голосов
/ 03 марта 2009

Следует отметить одну вещь - если вы задаете задачи сборки в проекте круиз-контроля, вам не нужно специально указывать ему объединять выходные данные - он обрабатывается автоматически. Один из методов отладки - начать с закомментирования всех задач, кроме первой. Если эта сборка прошла успешно, раскомментируйте следующую задачу и попробуйте снова. В конце концов вы найдете задачу, которая не выполняется, и сможете продолжить отладку оттуда.

0 голосов
/ 27 февраля 2009

Скорее всего ccnet.config в каталоге установки CC.NET.

...