XslCompiledTransform在C#中调试

时间:2009-01-16 17:50:01

标签: c# xml xslt xslcompiledtransform

我已经尝试过并试过但我无法进入XslCompiledTransform而无需从磁盘加载样式表(通过将URI传递给XslCompiledTransform.Load()方法)。

我完全清楚如果你通过URI(如上所述)从磁盘加载样式表,或者从实现IXmlLineInfo接口的XmlReader加载样式表,你只能进入XslCompiledTransform.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);

从我读过的各种文献来看,这似乎是启用调试的方式。但是,当我尝试进入XslCompiledTransform.Transform()方法时,我收到消息:“当前位置没有可用的源代码”

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

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

// Enable XSLT debugging.
XslCompiledTransform xslt = new XslCompiledTransform(true);
//compile stylesheet
xslt.Load(stylesheet);

上述方法是不可能的,因为我不希望不断地从磁盘读取和从磁盘读取。


感谢您的有用评论,我没有意识到微软已经做到了这一点,我相信这将证明非常将来有用。

但是,我想我的问题并没有让我自己完全清楚。我没有考虑进入加载方法,我想进入转换方法,所以我可以看到xsl转换发生了什么。我强调了load方法,因为你传递的参数决定了你是否能够调试转换方法(你必须传入一个实现IXmlLineInfo接口的XmlReader)。

虽然我可以使用您突出显示的技术进入变换方法,但我只是单步执行代码。虽然我可以通过观察代码来解决对变换的影响,但是xsl调试器逐行显示实际样式表本身的步进(而不是执行转换的每一行的代码)

2 个答案:

答案 0 :(得分:1)

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

进入SO答案太详细了,但这里有一篇关于这个主题的优秀博客文章。

http://codebetter.com/blogs/james.kovacs/archive/2008/01/17/debugging-into-the-net-framework-source.aspx

答案 1 :(得分:1)

我在尝试使用XmlReader.Create(new StringReader(String))时遇到了同样的问题。 调试器似乎必须能够找到一个磁盘文件才能使调试工作,但这并不意味着StringReaderXmlReader.Create的流版本无法使用。试试这个版本:

XmlReader.Create(new StringReader(String), New XmlReaderSettings(), baseURI)

在我的情况下,我使用文件资源来存储我的xslt字符串,因此我可以指向一个文件。实际上,您不需要提供调试器知道的绝对路径来搜索在Solution / Properties / Debugger源代码下指定的文件夹中的源代码。

XslCompiledTransform的文档具有误导性,因为它暗示所有需要的是XmlReader支持IXmlLineInfo界面。