如何在VS2010中指定一个用于转换文件的“自定义工具”?
对于大多数文件类型(例如.cs,.xml,.xslt),VS2010中的属性窗口允许指定用于转换文件的自定义工具。 作为参考,这里是选择“自定义工具”字段时获得的工具提示。
指定在设计时转换文件的工具,并将该转换的输出放置到另一个文件中。 例如,数据集(.xsd)文件附带一个默认的自定义工具。
我正在查找有关如何设置和使用此属性的信息。
这是我想解决的问题。 我正在通过应用XSLT来转换XML文件。 我在转换过程中使用扩展对象,如此处所述。
在这样做时,我已经将Visual Studio用作编辑和调试XSLT的工具。 我希望我可以编写一个简单的转换引擎,它允许我们像使用Visual Studio一样使用不使用扩展对象的XSLT文档。 我认为(希望)自定义工具属性是完成这项工作的关键。
TIA
自VS2005以来,支持使用扩展函数调试XSLT转换,并能够在XSLT代码和扩展函数代码中具有断点 。
只需使用此XslCompiledTransform构造函数重载 。
参数enableDebug类型:System.Boolean true用于生成调试信息; 否则为false。 将其设置为true可以使用Microsoft Visual Studio Debugger调试样式表。
备注
必须满足以下条件才能进入代码并调试样式表:
enableDebug
参数设置为true。
样式表作为URI或实现IXmlLineInfo
接口的XmlReader
类的实现传递给Load
方法。 IXmlLineInfo
接口在所有文本解析XmlReader
对象上实现。
换句话说,如果使用IXPathNavigable
对象(如XmlDocument
或XPathDocument
)或未实现IXmlLineInfo
接口的XmlReader
实现加载样式表,则无法调试样式表。
所述XmlResolver
用于加载样式表是基于文件的XmlResolver
,如XmlUrlResolver
(这是默认XmlResolver
由所使用的XslCompiledTransform
类)。
样式表位于本地机器或Intranet上。
这是一个小代码示例 :
// 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();
调试使用扩展对象的XSLT文件的解决方法是创建一个测试.exe文件项目(如控制台应用程序项目),并从该项目中调用XSLT(所有扩展对象均正确引用)。
您可以设置断点,然后“启动调试”test.exe项目以进入XSLT文件。
在2010年之前,“自定义工具”属性指定了在VS中注册的类的名称作为处理工具,该工具将获取项目项目的值并生成更多文件。 为此,您必须编写工具类,将其编译为程序集,并使用Visual Studio注册该程序集。 这个过程的一个例子可以在这里找到,但是请注意它不是专门针对VS 2010的,因此可能会中断 - 显然,自定义工具基于VS的COM对象模型。
我不确定这个功能在VS 2010中有多好的支持。我没有看到在VS 2010 SDK中编写这些工具的任何(明显的)文档,而Visual Studio博客上的这篇文章似乎讨论了这个功能(在“自定义构建工具”)或类似的,但我从来没有见过它在我的VS 2010副本中描述的任何UI。
在任何情况下,如果你只是想通过命令行来运行一些东西,那么最好是编辑.csproj的MSBuild来使用<Exec> task
- 如果你想构建一个自定义工具,我的第一个环节应该至少让你开始。
上一篇: How to specify a "Custom Tool" for transforming a file in VS2010?
下一篇: Output formatted text (including source code) as LaTeX, PDF and HTML