Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild Xslt任务未按预期工作_Msbuild_Xslt_Msbuildcommunitytasks - Fatal编程技术网

Msbuild Xslt任务未按预期工作

Msbuild Xslt任务未按预期工作,msbuild,xslt,msbuildcommunitytasks,Msbuild,Xslt,Msbuildcommunitytasks,我在VS中开发了一个XSLT转换。当我使用VS运行它时(通过XML->ShowXSLT输出),它工作得非常好。然而,当我通过MsBuildCommunityTasks Xslt任务执行它时,我得到了截然不同的结果 具体来说,输出只是我在XSLT中甚至没有引用的少数元素的内容。我猜默认的转换是拾取它们 我的任务声明再简单不过了: <Xslt Inputs="BuildLo​gs\partcover-result​s.xml" Xsl="ExtTools\​xslt\partcov

我在VS中开发了一个XSLT转换。当我使用VS运行它时(通过XML->ShowXSLT输出),它工作得非常好。然而,当我通过MsBuildCommunityTasks Xslt任务执行它时,我得到了截然不同的结果

具体来说,输出只是我在XSLT中甚至没有引用的少数元素的内容。我猜默认的转换是拾取它们

我的任务声明再简单不过了:

<Xslt 
  Inputs="BuildLo​gs\partcover-result​s.xml" 
  Xsl="ExtTools\​xslt\partcover.asse​mbly.report.xsl​" 
  RootTag="" 
  RootAttributes="" 
  Output="partcov​er.assembly.report.h​tml" 
/>


也许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="partcov​er.assembly.report.h​tml" 
   XmlInputPaths="BuildLo​gs\partcover-result​s.xml"
   XslInputPath="ExtTools\​xslt\partcover.asse​mbly.report.xsl"
  />


第一次为我工作!值得赞扬的是,Bryan Cook at提供了MSBuild中XSLT选项的良好概述。RootTag是在转换运行之前而不是之后应用的。在编写xslt时考虑RootTag,如果没有一些输入、xslt、正确的输出和不正确的输出,它将工作

,这有点难以调试。