Msbuild Xslt任务未按预期工作
我在VS中开发了一个XSLT转换。当我使用VS运行它时(通过XML->ShowXSLT输出),它工作得非常好。然而,当我通过MsBuildCommunityTasks Xslt任务执行它时,我得到了截然不同的结果 具体来说,输出只是我在XSLT中甚至没有引用的少数元素的内容。我猜默认的转换是拾取它们 我的任务声明再简单不过了:Msbuild Xslt任务未按预期工作,msbuild,xslt,msbuildcommunitytasks,Msbuild,Xslt,Msbuildcommunitytasks,我在VS中开发了一个XSLT转换。当我使用VS运行它时(通过XML->ShowXSLT输出),它工作得非常好。然而,当我通过MsBuildCommunityTasks Xslt任务执行它时,我得到了截然不同的结果 具体来说,输出只是我在XSLT中甚至没有引用的少数元素的内容。我猜默认的转换是拾取它们 我的任务声明再简单不过了: <Xslt Inputs="BuildLogs\partcover-results.xml" Xsl="ExtTools\xslt\partcov
<Xslt
Inputs="BuildLogs\partcover-results.xml"
Xsl="ExtTools\xslt\partcover.assembly.report.xsl"
RootTag=""
RootAttributes=""
Output="partcover.assembly.report.html"
/>
也许msbuildtasks使用的XSLT引擎与VS内部使用的不同?任何指导都将不胜感激。我还花了一些时间尝试让Xslt任务正常工作,摆弄RootTag和属性。大约两个小时后,我放弃了,而是写了自己的任务来完成这项工作,这在我的第一次尝试中奏效了
public override bool Execute()
{
bool result = true;
Log.LogMessage("Transforming from {0} to {1} using {2}",
XmlFile, OutputFile, XsltFile);
XmlWriter xmlWriter = null;
try
{
XslCompiledTransform xslTransform = GetXslTransform(XsltFile);
XmlReader xmlReader = GetXmlReader(XmlFile);
xmlWriter = GetXmlWriter(OutputFile);
xslTransform.Transform(xmlReader, xmlWriter);
}
catch (Exception e)
{
Log.LogErrorFromException(e);
result = false;
}
finally
{
if (xmlWriter != null)
{
xmlWriter.Flush();
xmlWriter.Close();
}
}
return result;
}
我也很难让
工作。从.NET4.0开始,就有内置的XmlTransformation任务。下面是您的示例的外观:
<XslTransformation
OutputPaths="partcover.assembly.report.html"
XmlInputPaths="BuildLogs\partcover-results.xml"
XslInputPath="ExtTools\xslt\partcover.assembly.report.xsl"
/>
第一次为我工作!值得赞扬的是,Bryan Cook at提供了MSBuild中XSLT选项的良好概述。RootTag是在转换运行之前而不是之后应用的。在编写xslt时考虑RootTag,如果没有一些输入、xslt、正确的输出和不正确的输出,它将工作,这有点难以调试。