2

我已经尝试了又尝试了,但我无法设法进入 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 转换发生了什么。我强调了加载方法,因为您传入的参数指示您是否能够调试转换方法(您必须传入实现 IXmlLineInfo 接口的 XmlReader 才能这样做)。

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

4

2 回答 2

1

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

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

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

于 2009-01-16T17:57:45.973 回答
1

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

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

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

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

于 2009-06-10T13:47:53.487 回答