Mel*_*els 2 .net msbuildcommunitytasks msbuild-4.0
我们使用MSBuild来运行一个项目,该项目通过社区任务包中的XMLQuery任务从XML文件中读取一些值.它在MSBuild 3.5下工作正常但在4.0下运行时失败并显示以下消息:
错误MSB4018:"XmlQuery"任务意外失败.System.Xml.XmlException:名称不能以'%'字符开头,十六进制值0x25.第1行,位于System.Xml.XmlTextReaderImpl.Throw(Exception e)的System.Xml.XmlTextReaderImpl.Throw(String res,String [] args),位于System.Xml.XmlTextReaderImpl.ParseQName(布尔值isQName,Int32 startOffset, System32下的System.Xml.XmlTextRemplImpl.ParseDocumentContent()中的System.Xml.Xml.XT文档中的System.Xml.XmlTextRemplImpl.ParseElement()中的System32.Xml.XPath.Dod.LoadFromReader(XmlReader阅读器,XmlSpace空间)在Microsoft.Build.BackEnd上的MSBuild.Community.Tasks.Xml.XmlQuery.Execute()中的MSBuild.Community.Tasks.Xml.XmlQuery.loadXmlContent()上的System.Xml.XPath.XPathDocument..ctor(TextReader textReader)中. TaskExecutionHost.
用于从构建目标中调用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>
Run Code Online (Sandbox Code Playgroud)
我只是无法理解什么是错的.XML文件完全有效,XMLQuery中指定的XPath应该返回一个值(并且总是有).我无法在任何地方找到单个%字符.
我不知道如何以及从何处开始解决这个问题......任何指向正确方向的人都会受到赞赏.
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>
Run Code Online (Sandbox Code Playgroud)
应该管用.
格雷格.
| 归档时间: |
|
| 查看次数: |
1698 次 |
| 最近记录: |