在Visual Studio 2003中,能够享受到为项目生成HTML文档的便利功能。但遗憾的是,这一功能在Visual Studio 2005中被移除。最近,在开发一个.NET库时,迫切需要这样的文档生成工具,但市面上的工具要么过时,要么不支持.NET Framework 2.0。因此,决定自己开发这样一个工具,希望它不仅能帮助,也能惠及其他程序员。
在开发这个工具的过程中,需要扩展以下知识点:
ImmDoc .NET目前只提供了命令行界面。这样做的好处是,可以轻松地从批处理脚本或支持构建过程的工具(如NAnt)中使用该程序。使用方法非常简单:将程序集和XML注释文件与ImmDoc .NET可执行文件放在同一文件夹中,然后运行程序,经过一些处理后,将得到一个包含生成文档的doc文件夹。
以下是ImmDoc.NET提供的一些命令行选项:
-pn, -ProjectName:STRING
- 如果想要给文档项目一个有意义的名称,可以使用这个开关。-ex, -Exclude:FILE
- 如果没有明确给出文件名,可以使用这个开关来排除特定文件的处理。-od, -OutputDirectory:DIR
- 使用这个开关来指定想要生成文档的目录名称。-fd, -ForceDelete
- 如果输出目录已经存在,ImmDoc .NET不会删除它,除非使用这个开关。-vl, -VerboseLevel:LEVEL
- 可以设置不同的详细级别,即级别越高,程序输出的信息就越多;LEVEL可以从0(无输出)到3(完全输出)。ImmDoc.NET由两个程序集组成,最后通过ILMerge工具合并成一个EXE文件。这两个程序集分别是:
在处理的第一步中,使用普通反射机制获取的信息与从XML注释文件中提取的注释结合起来,形成给定程序集的内部表示。
相关类包含在Imm.ImmDocNetLib.Documenters命名空间中。有一个名为Documenter的简单抽象类,可以从中派生出其他类,负责以喜欢的任何格式生成文档。已经实现了HTMLDocumenter类,它创建一组HTML、CSS和JavaScript文件。这些文件共同构成了给定程序集的类似MSDN的文档。
bool GenerateDocumentation(string outputDirectory, DocumentationGenerationOptions options)
- 这个方法启动生成文档的过程。它调用诸如PrepareOutputDirectory()、GenerateMainIndex()、ExtractStyleSheets()、ProcessAssemblies()、GenerateTableOfContents()等方法。void CreateInvokableMembersOverloadsIndex(MyInvokableMembersOverloadsInfo myInvokableMembersOverloadsInfo, MyClassInfo declaringType, string dirName)
- 这个方法创建一个HTML页面,其中包含特定方法或构造函数的所有重载的索引。string CreateNamespaceMemberSyntaxString(MyClassInfo namespaceMember)
- 这个方法负责创建类型声明字符串。这样的字符串包括例如可见性修饰符、基类、实现的接口、泛型参数的约束等。void ExtractBinaryResourceToFile(string resourceName, string fileName)
- 生成页面中使用了一些图形。这个方法用于将指定的嵌入式资源提取到物理文件中。string ProcessComment(string contents)
- 这个方法处理在XML文件中找到的每个注释,以替换诸如、、等标签为适当的HTML标签。
void WriteIndexHeader(StreamWriter sw, string pageTitle, string[] sectionsNamesAndIndices)
- 这个方法写入几乎所有生成页面都使用的通用HTML头部。string ResolveLink(MetaClass metaClass)
- 为了使生成的文档可用,需要提供页面之间的一些导航。这个方法有助于创建超链接的任务,例如,到类的特定成员。