Сбой MSBuild 4.0 в задаче XMLQuery (из пакета задач сообщества MSBuild) с ошибкой MSB4018 - PullRequest
2 голосов
/ 05 июля 2010

Мы используем MSBuild для запуска проекта, который, помимо прочего, считывает некоторые значения из файла XML с помощью задачи XMLQuery из пакета Community Tasks.Он работал нормально под MSBuild 3.5, но при запуске под 4.0 он выходит со следующим сообщением:

ошибка MSB4018: Задача «XmlQuery» неожиданно завершилась неудачно.System.Xml.XmlException: имя не может начинаться с символа «%», шестнадцатеричное значение 0x25.Строка 1, позиция 2. в System.Xml.XmlTextReaderImpl.Throw (исключение e) в System.Xml.XmlTextReaderImpl.Throw (String res, String [] args) в System.Xml.XmlTextReaderImpl.ParseQName (Boolean isQName, Int32 startOffsetInt32 & colonPos) в System.Xml.XmlTextReaderImpl.ParseElement () в System.Xml.XmlTextReaderImpl.ParseDocumentContent () в System.Xml.XmlTextReaderImpl.Read () в System.Xml.XPath.XLoDaderSpaceReader XSath.ReaderFirectorySpace XRath.в System.Xml.XPath.XPathDocument..ctor (TextReader textReader) в MSBuild.Community.Tasks.Xml.XmlQuery.loadXmlContent () в MSBuild.Community.Tasks.Xml.XmlQuery.Execute () в Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute () в Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask (ITaskExecutionHost taskExecutionHost, TaskLoggingContext, логика для задачиспользуется для вызова XMLQuery из цели сборки:

<!-- Read XML report -->
<ReadLinesFromFile File="coverageXML\symbolmodule.xml">
  <Output TaskParameter="Lines" ItemName="XmlReportLines" />
</ReadLinesFromFile>
<!-- Get number of visited sequence points -->
<XmlQuery Lines="@(XmlReportLines)" XPath="/trendcoveragedata/stats/@vsp">
  <Output TaskParameter="Values" PropertyName="VisitedSequencePoints" />
</XmlQuery>

Я просто не могу понять, что не так.XML-файл совершенно корректен, и XPath, указанный в XMLQuery, должен возвращать значение (и всегда имеет).Я нигде не могу найти ни одного символа% .

Я не уверен, как и с чего начать устранение этой проблемы ... Любые указатели в правильном направлении приветствуются.

1 Ответ

6 голосов
/ 23 мая 2011

ReadLinesFromFile сейчас (в MSBuild 4.0) возвращает экранированные значения.Вы должны удалить их перед запуском XmlQUery.Вот так:

<!-- Read XML report -->
<ReadLinesFromFile File="coverageXML\symbolmodule.xml">
  <Output TaskParameter="Lines" ItemName="XmlReportLinesEscaped" />
</ReadLinesFromFile>
<ItemGroup>
<XmlReportLinesEscaped>
  <Escaped>%(XmlReportLinesEscaped.Identity)</Escaped>
  <Unescaped>$([MSBuild]::Unescape('%(XmlReportLinesEscaped.Identity)'))</Unescaped>
</XmlReportLinesEscaped>
</ItemGroup>
<ItemGroup>
  <XmlReportLines Include="@(XmlReportLinesEscaped->'%(Unescaped)')"></XmlReportLines >
</ItemGroup>
<!-- Get number of visited sequence points -->
<XmlQuery Lines="@(XmlReportLines)" XPath="/trendcoveragedata/stats/@vsp">
  <Output TaskParameter="Values" PropertyName="VisitedSequencePoints" />
</XmlQuery>

Должно работать.

Грег.

...