我已经尝试过并试过但我无法进入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调试器逐行显示实际样式表本身的步进(而不是执行转换的每一行的代码)
答案 0 :(得分:1)
最近,Microsoft发布了.Net Framework的符号和源代码,以便在这种情况下进行调试。设置需要几秒钟,但是一旦完成,您应该能够进入Load方法,无论您如何构建XslCompiledTransform。
进入SO答案太详细了,但这里有一篇关于这个主题的优秀博客文章。
答案 1 :(得分:1)
我在尝试使用XmlReader.Create(new StringReader(String))
时遇到了同样的问题。
调试器似乎必须能够找到一个磁盘文件才能使调试工作,但这并不意味着StringReader
或XmlReader.Create
的流版本无法使用。试试这个版本:
XmlReader.Create(new StringReader(String), New XmlReaderSettings(), baseURI)
在我的情况下,我使用文件资源来存储我的xslt字符串,因此我可以指向一个文件。实际上,您不需要提供调试器知道的绝对路径来搜索在Solution / Properties / Debugger源代码下指定的文件夹中的源代码。
XslCompiledTransform
的文档具有误导性,因为它暗示所有需要的是XmlReader
支持IXmlLineInfo
界面。