如何在VS2010中指定用于转换文件的“自定义工具”?

时间:2011-01-19 16:40:05

标签: xml visual-studio-2010 debugging xslt

对于大多数文件类型(例如.cs,.xml,.xslt),VS2010中的“属性”窗口允许指定用于转换文件的自定义工具。作为参考,这是选择“自定义工具”字段时获得的工具提示。

  

指定在设计时转换文件并放置文件的工具   输入的转换成   另一个文件。例如,数据集   (.xsd)文件附带默认值   自定义工具。

我正在寻找有关如何设置和使用此属性的信息。

以下是我要解决的问题。我正在通过应用XSLT转换和XML文件。我正在转换期间使用扩展对象,如here所述。

这样做我将Visual Studio作为编辑和调试我的XSLT的工具变得毫无用处。我希望我能编写一个简单的转换引擎,它允许我们使用Visual Studio,就像我们对不使用扩展对象的XSLT文档一样。我认为(希望)自定义工具属性是实现此功能的关键。

TIA

3 个答案:

答案 0 :(得分:2)

自VS2005 以来,支持使用扩展函数调试XSLT转换,并且能够在XSLT代码中使用扩展函数代码。

只需使用this XslCompiledTransform constructor重载

参数 enableDebug 键入:System.Boolean 如果生成调试信息,则为true否则是假的。将此设置为true使您可以使用Microsoft Visual Studio调试器调试样式表。

说明

为了进入代码并调试样式表,必须满足以下条件:

enableDebug参数设置为true。

  • 样式表传递给Load 方法既可以是URI,也可以是 XmlReader类的实现 实现IXmlLineInfo 接口。 IXmlLineInfo接口 在所有文本解析上实现 XmlReader个对象。

    换句话说,如果样式表是 使用IXPathNavigable加载 对象,例如XmlDocumentXPathDocumentXmlReader 实现没有 实现IXmlLineInfo接口, 你无法调试样式表。

  • 用于加载的XmlResolver 样式表是基于文件的 XmlResolver,例如 XmlUrlResolver(这是默认值 XmlResolver使用的XslCompiledTransform // Enable XSLT debugging. XslCompiledTransform xslt = new XslCompiledTransform(true); // Load the style sheet. xslt.Load("output.xsl"); // Create the writer. XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent=true; XmlWriter writer = XmlWriter.Create("output.xml", settings); // Execute the transformation. xslt.Transform("books.xml", writer); writer.Close(); 类)。

  • 样式表位于 本地机器或内联网。

这是一个小代码示例

{{1}}

答案 1 :(得分:1)

调试使用扩展对象的XSLT文件的解决方法是创建测试.exe文件项目(例如控制台应用程序项目),并从该项目调用XSLT(正确引用所有扩展对象)。

您可以设置断点,然后“开始调试”测试.exe项目以进入XSLT文件。

答案 2 :(得分:1)

在2010年之前,“自定义工具”属性指定了在VS中注册的类的名称,作为处理工具,该工具将获取项目项的值并生成更多文件。为此,您必须编写工具类,将其编译为程序集,并使用Visual Studio注册该程序集。可以找到此过程的一个示例here,但请注意它并非专门用于VS 2010,因此可能会中断 - 自定义工具基于VS的COM对象模型apparently

我不确定这个功能在VS 2010中的支持程度如何。我没有看到任何(明显的)关于在VS 2010 SDKthis post on the Visual Studio blog中编写这些工具的文档来讨论功能(在“自定义构建工具”下)或类似功能,但我从未见过它在我的VS 2010副本中描述的任何UI。

在任何情况下,如果您只是尝试通过命令行运行某些内容,那么最好只编辑.csproj的MSBuild以使用<Exec> task - 如果您确实想要建立一个自定义工具,我希望第一个链接至少可以让你开始。