65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio .NET 的 XSL 转换代码生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (12投票s)

2006年2月8日

CPOL

3分钟阅读

viewsIcon

152497

downloadIcon

2534

一个用于 Visual Studio .NET 的自定义工具,它运行 XSL 转换以生成代码

Sample Image - TransformCodeGenerator.gif

引言

在阅读了 CodeProject 上一篇题为 基于 VS.NET CodeDOM 的字符串资源管理自定义工具 的文章后,作者 Jasmin Muharemovic 介绍了用于字符串资源的 StringResourceTool 自定义工具,我发现为 Visual Studio .NET 创建自定义工具是多么容易。

问题

为了生成代码,您可以使用 CodeDOM 对象,这些对象看起来编写起来相当复杂和笨拙。此外,如果用于代码生成的“源”文件是某种文本格式,那么需要执行大量的字符串解析来提取生成相应代码所需的“参数”。

另一个问题是,每次您想生成其他内容时,您都必须创建另一个自定义工具并在 Visual Studio 中注册它。这可能导致自定义工具的“DLL 地狱”,并且很难记住每个工具的名称。

解决方案:XML + XSLT

XML 解决了所有这些繁重的字符串解析问题,并提供了一种强大的机制 (XPath) 用于从 XML 文件中提取您想要的任何内容。XSLT 提供了一种灵活的机制,可以生成任何格式的输出。因此,我修改了自定义工具代码以运行 XSL 转换而不是生成代码。

通过这种方式,每次我想创建一个新的代码生成器类型时,我只需为源文件发明一个新的 XML 模式,并使用相应的 XSL 转换来生成所需的代码。

工作原理

TransformCodeGenerator 正常工作有两个要求

  • XML 源文件的根元素必须包含一个名为“transformer”的属性。此属性的值指定要用于转换的 XSLT 文件。
  • XSLT 文件名可以是完全限定的,也可以只是文件名,在这种情况下,该文件必须与 XML 文件位于同一目录中(在项目中),或者与 TransformCodeGenerate.dll 文件位于同一目录中。

将您的 XML 文件添加到您的 Visual Studio 解决方案中,并将 CustomTool 属性设置为 TransformCodeGenerator。每次修改并保存 XML 文件时,自定义工具将重新生成您的代码。

示例项目

我创建了两个示例 XML 文件来演示此自定义工具的可能用法。

我发明了一个 XML 模式,它描述了一个带有几个控件的 WinForms 表单。请查看测试项目中的“MyXMLForm.xml”文件。随附的 XSLT 转换“MakeXMLFormCode.xslt”将其转换为代码,该代码创建一个类,该类具有每个控件的字段,创建一个新的控件实例,设置控件属性,并将它们添加到表单中。

第二个例子是针对“类型安全”的 DataTable。这个 XML 文件以比 XSD 文件更友好的方式描述了数据库表。这次,XSLT 生成两个分别从 DataTableDataRow 继承的类。DataRow 类将为 DataTable 包含的每一列提供类型安全的属性。您可以通过创建一个读取数据库模式并生成此 XML 文件的工具来进一步扩展此示例... :-)

结论

XML + XSLT 提供了一种生成代码生成的强大方法,现在有了 Visual Studio 的 TransformCodeGenerator 自定义工具,它比运行外部工具来运行转换要容易得多。

请注意: 本文无意深入探讨如何编写 XML 文件或 XSLT 转换的细节。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.