CodeModelMacros 示例:演示如何使用代码模型函数
更新:2007 年 11 月
此示例是使用代码模型执行有用任务的宏的集合。包含的宏有:
HierarchyGenerator 生成一个 HTML 文件,该文件具有用于项目中的类、结构和接口的继承树。
该宏首先组合由终端类、结构或接口(没有任何导出类型的那些项)组成的集合。该宏实现此操作的方法是:验证没有其他代码元素在其基集合中有这些类、结构或接口。然后它生成一个 HTML 报表,该报表列出终端对象以及它们所有的基。该宏将此文件添加到解决方案的第一个项目中。
InterfaceDocGenerator 为项目中所实现的接口生成 HTML 文档。该宏从实现接口方法的类函数中收集注释。
该宏枚举 CodeModel.Interfaces 集合中包含的接口,然后查找实现每个接口的类。对于每个类,该宏查找接口的方法实现并将注释存储在 HTML 文件中。
UserTypeGenerator 生成名为 usertype.dat 的文件,该文件包含项目中类的名称。如果将该文件放到 devenv.exe 所在的同一位置(例如,c:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE),源代码编辑器将使类名以彩色显示。
该宏将 CodeModel.Classes 集合中包含的类的名称写入文件 (usertype.dat) 中。
VirtualFunctionFinder 向在项目中找到的虚拟函数添加 TODO 注释。
VirtualFunctionFinder 通过递归地验证每个类或结构的函数来查找项目中声明的虚拟函数。然后,通过更改 CodeFunction.Comment 属性向每个虚拟函数添加注释。
安全说明: |
---|
提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 |
获取示例和安装示例的说明:
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
安装并运行示例
安装这些宏
将 CodeModelMacros.vsmacros 文件复制到硬盘中。
启动 Visual Studio。
从“工具”菜单中,指向“宏”,然后单击“宏资源管理器”。这将打开“宏资源管理器”窗口。
从“工具”菜单中,指向“宏”,然后单击“加载宏项目”。这将打开“添加宏项目”对话框。
浏览到 CodeModelMacros.vsmacros 文件并单击“打开”按钮。该操作将加载该宏文件,这些宏将显示在“宏资源管理器”中。
展开“CodeModelMacros”节点。将看到每个宏均有一个模块。
执行 HierarchyGenerator
在“宏资源管理器”中展开“HierarchyGenerator”节点。
双击“HierarchyGenerator”宏。这将执行该宏并将 HTML 文件添加到解决方案的第一个项目中。
执行 InterfaceDocGenerator
在“宏资源管理器”中展开“InterfaceDocGenerator”节点。
双击“InterfaceDocGenerator”宏。这将执行该宏并将 HTML 文件添加到解决方案的第一个项目中。
执行 UserTypeGenerator
在“宏资源管理器”中展开“UserTypeGenerator”节点。
双击“UserTypeC”宏。这将执行该宏并在 C: 驱动器的根目录中创建 usertype.dat 文件。
执行 VirtualFunctionFinder
在“宏资源管理器”中展开“VirtualFunctionFinder”节点。
双击“MainVirtualFunctionFinder”宏。这将执行该宏并向项目中所声明的虚拟函数添加 TODO 注释。
关键字
此示例说明以下关键字:
CodeClass::Members、CodeElement.CodeTypeFromFullName、CodeElement::Children、CodeElement::FullName、CodeElement::Kind、CodeFunction::CanOverride、CodeFunction::Comment、CodeFunction::InfoLocation、CodeFunction::Name、CodeInterface::Name、CodeModel::CodeElements、CodeModel::Language、CodeNamespace::Members、CodeStruct::Members、CodeType::Bases、Project::CodeModel、Solution::Count、VCCodeBase::FullName、VCCodeBase::Name、VCCodeClass::Functions、VCCodeClass::ImplementedInterfaces、VCCodeClass::IsSelf、VCCodeClass::Name、VCCodeFunction::Attributes、VCCodeFunction::Comment、VCCodeFunction::IsVirtual、VCCodeInterface::Functions、VCCodeModel::Classes、VCCodeModel::Interfaces