Xml 如何指定";自定义工具“;用于在VS2010中转换文件?
VS2010中大多数文件类型(如.cs、.xml、.xslt)的属性窗口允许用户指定用于转换文件的自定义工具。以下是选择“自定义工具”字段时获得的工具提示,以供参考 指定在设计时转换文件并放置 将该转换的输出转换为 另一个文件。例如,数据集 (.xsd)文件带有默认值 自定义工具 我正在寻找有关如何设置和使用此属性的信息 这是我试图解决的问题。我正在通过应用XSLT转换XML文件。如前所述,我在转换期间使用扩展对象 在这样做的过程中,我使VisualStudio作为编辑和调试XSLT的工具变得毫无用处。我希望能够编写一个简单的转换引擎,使我们能够像对待不使用扩展对象的XSLT文档一样使用VisualStudio。我认为(希望)自定义工具属性是实现此功能的关键Xml 如何指定";自定义工具“;用于在VS2010中转换文件?,xml,visual-studio-2010,debugging,xslt,Xml,Visual Studio 2010,Debugging,Xslt,VS2010中大多数文件类型(如.cs、.xml、.xslt)的属性窗口允许用户指定用于转换文件的自定义工具。以下是选择“自定义工具”字段时获得的工具提示,以供参考 指定在设计时转换文件并放置 将该转换的输出转换为 另一个文件。例如,数据集 (.xsd)文件带有默认值 自定义工具 我正在寻找有关如何设置和使用此属性的信息 这是我试图解决的问题。我正在通过应用XSLT转换XML文件。如前所述,我在转换期间使用扩展对象 在这样做的过程中,我使VisualStudio作为编辑和调试XSLT的工具变得毫
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
class)xslcomiledtransform
- 样式表位于 本地计算机或内部网上的
// 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样式表”问题的一个极好的回答。