Xml 如何指定";自定义工具“;用于在VS2010中转换文件?

Xml 如何指定";自定义工具“;用于在VS2010中转换文件?,xml,visual-studio-2010,debugging,xslt,Xml,Visual Studio 2010,Debugging,Xslt,VS2010中大多数文件类型(如.cs、.xml、.xslt)的属性窗口允许用户指定用于转换文件的自定义工具。以下是选择“自定义工具”字段时获得的工具提示,以供参考 指定在设计时转换文件并放置 将该转换的输出转换为 另一个文件。例如,数据集 (.xsd)文件带有默认值 自定义工具 我正在寻找有关如何设置和使用此属性的信息 这是我试图解决的问题。我正在通过应用XSLT转换XML文件。如前所述,我在转换期间使用扩展对象 在这样做的过程中,我使VisualStudio作为编辑和调试XSLT的工具变得毫

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

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

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

这是我试图解决的问题。我正在通过应用XSLT转换XML文件。如前所述,我在转换期间使用扩展对象

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


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

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

在2010年之前,“自定义工具”属性指定了一个类的名称,该类在VS中注册为处理工具,它将获取项目项的值并生成更多文件。为此,您必须编写工具类,将其编译为程序集,并向VisualStudio注册该程序集。我们可以找到这个过程的一个例子,但请注意它不是专门针对VS 2010的,因此可能会中断——定制工具基于VS的COM对象模型

我不确定VS2010对该功能的支持程度。我没有看到关于在中编写这些工具的任何(明显的)文档,并且似乎讨论了该功能(在“自定义构建工具”下)或类似的功能,但我从未见过它在我的VS2010副本中描述的任何UI


在任何情况下,如果您只是试图通过命令行运行一些东西,那么最好只编辑.csproj的MSBuild以使用
任务
——如果您确实希望生成自定义工具,希望我的第一个链接至少能帮助您入门。

自VS2005以来,就支持使用扩展函数调试XSLT转换,并支持在XSLT代码和扩展函数代码中都有断点

只需使用重载

参数 启用调试 类型:System.Boolean true生成调试信息;否则就错了。将此设置为true可以使用Microsoft Visual Studio调试器调试样式表

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

enableDebug
参数设置为true

  • 样式表将传递给加载 方法作为URI或
    XmlReader
    类的实现 它实现了
    IXmlLineInfo
    接口。
    IXmlLineInfo
    界面 在所有文本解析上实现
    XmlReader
    对象

    换句话说,如果样式表是 使用
    IXPathNavigable加载
    对象,例如
    XmlDocument
    XPathDocument
    ,或
    XmlReader
    不需要的实现 实现
    IXmlLineInfo
    接口, 无法调试样式表

  • 用于加载 样式表是基于文件的
    XmlResolver
    ,例如
    XmlUrlResolver
    (这是默认设置
    XmlResolver
    xslcomiledtransform
    class)

  • 样式表位于 本地计算机或内部网上的

下面是一个小代码示例

// 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。有关相关MSDN文档的链接,以及如何调试XSLT转换及其使用的扩展函数的说明,请参见我的答案——一起:迪米特里的解决方案解决了我的部分问题。我更进一步,在样式表中添加了一个参数。该参数在从代码调用转换时设置,但在设计器中转换时未设置。然后,在设计器中测试转换时,我使用参数existance来抑制对扩展对象的调用。+1这是对“如何在Visual Studio中调试带有扩展的XSLT样式表”问题的一个极好的回答。