【问题标题】:How to specify a "Custom Tool" for transforming a file in VS2010?如何在 VS2010 中指定用于转换文件的“自定义工具”?
【发布时间】:2011-01-23 02:10:35
【问题描述】:

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

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

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

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

这样做时,我使 Visual Studio 无法用作编辑和调试 XSLT 的工具。我希望我可以编写一个简单的转换引擎,使我们能够像使用不使用扩展对象的 XSLT 文档一样使用 Visual Studio。我认为(希望)自定义工具属性是完成这项工作的关键。

TIA

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获取相关 MSDN 文档的链接以及如何调试 XSLT 转换它使用的扩展函数的链接——一起。 :)
  • Dimitre 的解决方案解决了我的部分问题。我更进一步,在样式表中添加了一个参数。从代码调用转换时设置该参数,但在设计器中进行转换时不设置该参数。然后,在设计器中测试转换时,我使用参数的存在来抑制对扩展对象的调用。

标签: xml visual-studio-2010 debugging xslt


【解决方案1】:

使用扩展函数调试 XSLT 转换,能够在 XSLT 代码中设置断点自 VS2005 起就支持扩展函数代码

只需使用this XslCompiledTransform constructor重载

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

备注

必须满足以下条件才能进入代码并调试样式表:

enableDebug 参数设置为 true。

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

    换句话说,如果样式表是 使用IXPathNavigable 加载 对象,例如 XmlDocumentXPathDocument,或XmlReader 不执行 实现IXmlLineInfo接口, 您无法调试样式表。

  • XmlResolver 用于加载 样式表是基于文件的 XmlResolver,如 XmlUrlResolver(这是默认的 XmlResolverXslCompiledTransform 类)。

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

这是一个小代码示例

// 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 这是对“如何在 Visual Studio 中调试带有扩展名的 XSLT 样式表”问题的绝佳答案。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    我不确定在 VS 2010 中对该功能的支持程度如何。我在VS 2010 SDKthis post on the Visual Studio blog 中没有看到有关编写这些工具的任何(明显)文档,似乎讨论了该功能(在“ Custom Build Tools") 或类似工具,但我从未见过它在我的 VS 2010 副本中描述的任何 UI。

    无论如何,如果你只是想通过命令行运行一些东西,你最好只编辑 .csproj 的 MSBuild 以使用 <Exec> task——如果你确实想构建一个自定义工具,希望我的第一个链接至少可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多