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

Я унаследовал существующий проект с неудачной сборкой. Я вижу исключение в файле 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 или что-то в этом роде (я отключил всех издателей слияния)


person Grzenio    schedule 27.02.2009    source источник
comment
Вы чего-нибудь добились с этим?   -  person Drew Noakes    schedule 02.03.2009


Ответы (4)


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

System.Xml.XmlWriter.WriteNode

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

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

Независимо от того, какой это XML-файл, проблема в строке 17, строке 100.

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

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

ИЗМЕНИТЬ

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

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

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

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

person Drew Noakes    schedule 27.02.2009
comment
к сожалению, это единственное сообщение об ошибке, которое я получаю :(. Итак, какие файлы я должен попробовать посмотреть? Где файл статистики? Какие еще файлы я мог бы посмотреть? - person Grzenio; 27.02.2009
comment
В моих сборках статистика хранится в файле с именем report.xml и хранится в родительской папке журналов сборки. Попробуйте открыть этот файл и посмотреть, как он выглядит в конце. Кроме того, если у вас несколько сборок, происходит ли это для всех? - person Drew Noakes; 27.02.2009
comment
Привет, наконец-то я понял! (см. мой ответ) мне потребовалось время, чтобы найти, хотя CCNet может выдать более значимую ошибку. - person Grzenio; 04.03.2009

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

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

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

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

person Grzenio    schedule 04.03.2009

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

person Pedro    schedule 02.03.2009

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

person Kent Boogaart    schedule 27.02.2009
comment
попробуйте найти строку 17, позицию 100 в ccnet.config - person Ray Lu; 27.02.2009
comment
Я действительно не думаю, что это ccnet.config, потому что эта ошибка возникает в конце сборки (извините, я добавлю ее к вопросу) - person Grzenio; 27.02.2009