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ファイルで、どうすれば修正できますか? 厄介なことに、ビルドが赤くなりますが、最近のビルドの Web ページに追加されていません。

EDIT明確にさせてください:これはビルドの最後に発生します。おそらく、ビルド レポート xml などを生成しようとしたときに発生します (すべてのマージ パブリッシャーを無効にしました)。

4

4 に答える 4

1

最後に問題を見つけることができました: ビルドはほとんどのタスクを実行するために Nant を使用し、Nant は正しく構成されていませんでした:

  • すべてのデバッグ情報をログに記録するように構成されました
  • log4net は、nant.exe.config の <> 括弧内に何かを記録するように構成されました

そのため、ccnet が nant 出力をビルド出力とマージしようとしたときに、ビルドが失敗していました。

助けてくれて本当にありがとう!

于 2009-03-04T10:38:53.667 に答える
1

ccnet.configスタック フレームのため、これがあなたのファイルかどうかわかりません:

System.Xml.XmlWriter.WriteNode

...CC.NET が独自のccnet.configファイルに書き戻すとは思えません。これはおそらくビルド中に発生していますよね?

スタック トレースから、使用しているファイルを正確に特定することは困難です。上位からのスタック フレームが増えていませんか?

XML ファイルが何であれ、問題は 17 行目の 100 行にあります。

統計を使用している場合、この問題は統計ファイルが原因であることがわかる場合があります。私が言ったように、より完全なスタック トレースなしで言うのは難しいです。

ディスクが完全にいっぱいになると、統計ファイルが破損することがあります。すべての要素が適切に閉じられていることを確認して、XML ファイルの末尾を手動で修正する必要がある場合があります。

編集

この問題はおそらくパブリッシャーのステップによるファイルのマージに関連していると思いました。ccnet.configファイルには、ビルドの最後に、CC が複数のファイル (通常は XML ファイル) をマージして、Web ダッシュボードが生成される 1 つの大きな XML ドキュメントを作成するステップがあります。私の推測では、マージしようとしているファイルの 1 つにこの偽の文字が含まれており、マージ手順が失敗しています。

私の構成ファイルでは、問題のステップは次のようになります。

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

そのフォルダを見て、ある%べきではない場所に文字があるかどうかを確認してください。おそらく、実際にはまったく XML ではない何らかの種類のファイルを吸い込んでいるのでしょう。

于 2009-02-27T11:46:27.383 に答える
0

1 つの注意点 - クルーズ コントロール プロジェクト内でビルド タスクを指定する場合、出力をマージするように特に指示する必要はありません - 自動的に処理されます。デバッグの 1 つの方法は、最初のタスクを除くすべてのタスクをコメントアウトすることから始めることです。そのビルドが成功した場合は、次のタスクのコメントを外して、もう一度やり直してください。最終的に、失敗しているタスクが見つかり、そこからデバッグを続行できます。

于 2009-03-02T21:47:30.283 に答える
0

ほとんどの場合、 CC.NETインストール ディレクトリの ccnet.config です。

于 2009-02-27T11:43:08.530 に答える