2010-07-05 2 views
2

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

ошибка MSB4018: задача «XmlQuery» неожиданно завершилась. System.Xml.XmlException: Имя не может начинаться с символа '%', шестнадцатеричного значения 0x25. Строка 1, позиция 2. в System.Xml.XmlTextReaderImpl.Throw (Exception е) в System.Xml.XmlTextReaderImpl.Throw (String разрешением, String [] арг) в System.Xml.XmlTextReaderImpl.ParseQName (Boolean isQName, Int32 startOffset, Int32 & colonPos) на System.Xml.XmlTextReaderImpl.ParseElement() в System.Xml.XmlTextReaderImpl.ParseDocumentContent() в System.Xml.XmlTextReaderImpl.Read() в System.Xml.XPath.XPathDocument. LoadFromReader (считыватель XmlReader, XmlSpace пространство) в System.Xml.XPath.XPathDocument..ctor (ЧтениеТекста 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 taskLoggingContext, TaskHost taskHost, ItemBucket ведро, TaskExecutionMode howToExecuteTask, Boolean & taskResult)

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

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

+2

Я заметил, что можно фактически отлаживать проекты MSBuild с помощью Visual Studio 2010, поэтому я попытаюсь посмотреть, дает ли это больше информации – Mels

ответ

6

ReadLinesFromFile теперь (в MSBuild 4.0) возвращает escaped значений. Вы должны освободить их перед запуском 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> 

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

Greg.

Смежные вопросы