Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
C# 用C语言进行XslCompiledTransform调试#_C#_Xml_Xslt_Xslcompiledtransform - Fatal编程技术网

C# 用C语言进行XslCompiledTransform调试#

C# 用C语言进行XslCompiledTransform调试#,c#,xml,xslt,xslcompiledtransform,C#,Xml,Xslt,Xslcompiledtransform,我试了又试,但如果不从磁盘加载样式表(通过将URI传递到xslcomiledtransform.load()方法),我就无法进入xslcomiledtransform 我完全知道,只有通过URI(如上所述)从磁盘加载样式表,或者从实现IXmlLineInfo接口的XmlReader加载样式表,才能使用xslciledTransform.Transform()方法 我已按如下方式加载样式表: XslCompiledTransform xslt = new XslCompiledTransform(

我试了又试,但如果不从磁盘加载样式表(通过将URI传递到xslcomiledtransform.load()方法),我就无法进入xslcomiledtransform

我完全知道,只有通过URI(如上所述)从磁盘加载样式表,或者从实现IXmlLineInfo接口的XmlReader加载样式表,才能使用xslciledTransform.Transform()方法

我已按如下方式加载样式表:

XslCompiledTransform xslt = new XslCompiledTransform(true);
//grab string from textbox
XmlReader reader = XmlReader.Create(new StringReader(XsltBox.Text));

// Compile the style sheet.
xslt.Load(reader);
从我读过的各种文献来看,这似乎是启用调试的方式。但是,当我尝试进入xslcomiledtransform.Transform()方法时,我得到一条消息:“当前位置没有可用的源代码”

如前所述,如果我执行以下操作,我可以进入转换:

string stylesheet = @"C:\PathToMy\Stylesheet.xsl";

// Enable XSLT debugging.
XslCompiledTransform xslt = new XslCompiledTransform(true);
//compile stylesheet
xslt.Load(stylesheet);
上述方法是不可能的,因为我不希望不断地从磁盘读取数据


谢谢你的有用评论,我不知道微软已经这么做了,我相信这将在未来证明非常有用

然而,我想我在我的问题上并没有完全弄清楚。我并不是想进入load方法,而是想进入transform方法,这样我就可以看到xsl转换发生了什么。我强调了load方法,因为传入的参数指示是否能够调试transform方法(必须传入一个实现IXmlLineInfo接口的XmlReader才能调试)


虽然我可以使用您强调的技术逐步进入转换方法,但我只是逐步完成代码。虽然我可以通过观察代码来找出转换的潜在影响,但xsl调试器会逐行显示实际样式表本身的步骤(与执行每一行转换的代码相反)

最近,Microsoft发布了.Net Framework的符号和源代码,以便在这种情况下进行调试。设置需要几秒钟的时间,但一旦设置完成,无论您如何构建XslCompiledTransform,都应该能够进入Load方法

这篇文章太详细了,无法给出如此详细的答案,但这里有一篇关于这个主题的优秀博文


我在尝试使用
XmlReader.Create(newstringreader(String))
时遇到了同样的问题。 调试器似乎必须能够找到磁盘文件才能进行调试,但这并不意味着不能使用
StringReader
XmlReader.Create
的流版本。请尝试以下版本:

XmlReader.Create(new StringReader(String), New XmlReaderSettings(), baseURI)
在我的例子中,我使用一个文件资源来存储我的xslt字符串,这样就可以指向一个文件。事实上,您不需要为调试器提供在Solution/Properties/debugger source code下指定的文件夹中搜索源代码所需的绝对路径


xslcomiledtransform
的文档具有误导性,因为它意味着所需要的只是一个支持
IXmlLineInfo
接口的
XmlReader

您是在调试框架的Transform()实现,还是在XSLT?AFAIK中设置断点,这在VisualStudio的XSLT调试器中是不可能的。您总是需要在光盘上安装一个XSLT文件进行调试。