AppXmlViewer:介于 Doxygen 和原始 XML 之间
用于在 DataGridView 中查看应用程序文档 XML 的实用工具。
引言
文档是我们生活世界中最不受人喜爱的一方面。编写代码大部分时间都很有趣。但文档不知何故并不归类于“有趣”!然而,众所周知,记录代码是一个好习惯,即使只是为了防止您自己犯错!Visual Studio 2005 在让您更轻松地添加“边写边记录”的文档方面做了很多工作。您可以毫不费力地为
- 类
- 构造函数
- 属性
- 方法
- 方法参数
- 方法返回值
- 字段(如枚举)
- ……等
一个类。从开发者的角度来看,这样做最有价值的回报是——所有描述性信息都会显示在令人惊叹的 **IntelliSense** 弹出窗口中。
编写这些描述的另一个隐藏好处是,只需在 Visual Studio 的 **Project > *app* Properties > Build**(其中 *app* 是您的应用程序名称)中勾选一个复选框,如下图所示……每次构建您的应用程序时,Visual Studio 都会生成一个包含您所有宝贵描述的 XML 文件。立即生成。
好消息
这就是好消息。事实上,您可以使用 **Doxygen** 和 **Sandcastle** 等工具来制作您的 *app.xml* 文件非常可展示的版本。
坏消息
坏消息是,使用 Doxygen 和 Sandcastle 等工具会涉及一些“额外”步骤。如果您不采取这些步骤,除非您喜欢 XML,否则自动生成的 XML **对用户来说并不友好**,因为它看起来像这样
<doc>
<assembly>
<name>VVX_AppXmlViewer</name>
</assembly>
<members>
<member name="T:VVX_AppXmlViewer.Form_VVX_AppXmlView">
<summary>
Main form of this application
</summary>
</member>
<member name="M:VVX_AppXmlViewer.Form_VVX_AppXmlView.#ctor">
<summary>
The only constructor for this form
</summary>
</member>
<member name="M:VVX_AppXmlViewer.Form_VVX_AppXmlView.DoUpdateCaption">
<summary>
Refreshes the window's Caption/Title bar
</summary>
</member>
<member name="M:VVX_AppXmlViewer.Form_VVX_AppXmlView.
DoNavigateToInfoPage">
<summary>
Moves up the directory tree and locates the info HTML file
</summary>
</member>
<member name="M:VVX_AppXmlViewer.Form_VVX_AppXmlView.
DoGridCustomization(System.Windows.Forms.DataGridView)">
<summary>
Normally invoked once at startup
</summary>
<param name="dgv">The DataGridView to be customized</param>
</member>
<member name="M:VVX_AppXmlViewer.Form_VVX_AppXmlView.DoGridPopulate
(System.Windows.Forms.DataGridView,VVX.AppXmlDoc)">
<summary>
Invoked after an AppXml file is opened by user to display its contents
in a DataGridView
</summary>
<param name="dgv">DataGridView instance in which to display the data</param>
<param name="appXmlDoc">instance of
AppXmlDoc</param>
</member>
...
...
...
</members>
</doc>
AppXmlViewer 的需求
在上面提到的“好消息”和“坏消息”的极端之间似乎没有什么。但有时您可能会希望有些折衷方案,例如……
- 您需要快速浏览自己的 *app.xml* 文件,然后再将其发送给其他人,原因可能是为了通过 Doxygen 进行处理。
- 您从 CodeProject 等网站下载了源代码,其中附带了 *app.xml* 文件。
- 您的老板或同事要求您将所有描述性信息发送给他/她一份单一的文档(而不是一个网站)。
- ...
AppXmlViewer 的目标
- 启动实用工具
- 打开一个 *app.xml* 文件
- 以用户友好的布局快速浏览它
- 有时以几种明显的方式进行排序和/或过滤
- 退出实用工具
然后继续做您最喜欢的事情!
免责声明
我之所以进行这个项目,是为了学习 Visual Studio 2005、C#、XML、DataGridView
、应用程序文档 XML 等方面的知识。请注意:**没有任何内容经过适当或充分的测试**。更重要的是,很有可能您或其他人可以做得更好。因此,如果您使用此代码但无法获得预期结果,我可能帮不了您太多。从积极的一面来看,您拥有源代码和(尽管不易理解)微软的技术参考资料。
有用参考
- Jaiprakash M Bankolli 编写的 C# 文档
- J. Andrew Schafer 编写的 XML 注释允许您直接从 Visual Studio .NET 源文件构建文档
- Microsoft 编写的文档注释推荐标签(C# 编程指南)
- Microsoft 编写的 C# 文档
- Microsoft 在 MSDN 上的参考列表
使用应用程序
在执行任何操作之前,请务必阅读上面的免责声明。
主窗口
解决方案包含一个带有两个选项卡的标签控件
- **AppDocXML** 在您打开 XML 文件后,会“按原样”显示它。
- **AppDocTable** 在
DataGridView
表中显示 XML 文件的解析内容。它列出了 XML 中member
节点的内容,并提取和显示以下列中的数据: - **#** 每个成员的编号,主要用于排序。
- **Qualifier** 松散地描述成员(行),例如“Method”。
- **Type** 通常是成员
name
属性的第一个字母。Mp 表示包含param
数据类型和您提供的任何描述的行,Mr 表示包含您提供的returns
描述的行。 - **Namespace** 是成员所属的
namespace
。 - **Class** 是成员所属的
class
。 - **Name** 是成员(方法、属性等)的
name
。 - **Summary** 是您提供的
summary
文本。
过滤成员列表
您可以通过两种方式缩短成员列表:
- **View > Include > ...** 菜单命令允许您包含/排除各种 **Type** 的成员。
- 组合框列出了 XML 中找到的各种类。如果您选择 **All Classes**,则会列出所有适用的成员(即,基于“Include...”标准)。或者,只会列出与所选类匹配的成员。
打印
打印表格的支持有限。它很大程度上是从另一个 CodeProject 实用工具中直接引用的:《XmlStore 第二部分:打印 DataGridView 内容》。
创建 PDF
如果您希望根据 DataGridView
的内容创建 PDF,您可以使用 **File > Export > XmlStore** 菜单命令将内容导出,以创建 XmlStore 文件,然后使用 **使用 C# (.NET 2.0) 和 iTextSharp 创建 PDF 表格** 中提供的实用工具来创建 PDF、加密等。生成的 PDF 可能看起来像
后者还展示了水印文本和图像的使用。
需要集成 PDF 生成器?
我没有将 PDF 生成器集成到此实用工具中,部分原因是我不确定是否有兴趣,部分原因是它无法“开箱即用”——您需要从 SourceForge.net 下载相应的 *iTextSharp.DLL*。但是,如果足够多的人在本文下方的论坛上发表请求,我将尝试将 PDF 生成器构建到此实用工具中。
来源
此解决方案是使用 Visual Studio 2005 创建的。
构建解决方案
如果您拥有 Visual Studio 2005,那么您应该能够“开箱即用”地使用项目源代码——只需构建并运行。代码本身不是什么高科技。它有 reasonably documented。如果您没有 Visual Studio 2005,您将不得不请一位更有经验的朋友。(别问我,我还是个新手!我对 VB.NET 也一窍不通!)
代码模块
对新手(比如我)来说,代码的附带好处是:该项目包含 reasonably documented 且自解释的代码模块。运气好的话,它们可能有助于您了解如何使用子系统的某些功能。
VVX_AppDocXml.cs
VVX.AppDocXml
是一个用于翻译上述 UI 选项并解析 *app.XML* 文件的类。它包含一个主要方法 DoExtractMemberData(...)
。它相当直接且 reasonably documented。它基本上构建了一个 ArrayList
,其中包含另一个(也在同一模块中)相当简单的类 VVX.AppXmlMember
。
Form_VVX_AppXmlView.cs
这是该实用工具的窗体类。大部分内容都相当简单。值得注意的一个方法是 DoViewTableTabPageInit()
。它使用 VVX.AppDocXml
来解析 *app.XML* 文件,然后填充 DataGridView
。
其他近期贡献
如果其中任何内容对您有帮助……
请考虑向我最喜欢的几个慈善机构之一捐款:**Year Up**,或向世界各地任何类似的非政府组织(NGO)捐款,它们无私地做好事并帮助有需要的人。少付出,多收获!