.NET文档生成工具ADB[更新至2.3]

ADB2.3下载 其他版本下载  ADB2.3源代码下载  Microsoft HTML Help Workshop下载

注意:使用该软件需先安装Microsoft HTML Help Workshop

程序的注释在程序的编写和维护中扮演着相当重要的角色,在Visual C#中,可以为代码创建文档,方法是在XML标记所指的代码块前面,直接在源代码的特殊注释字段中包括XML 标记。编译器编译时将在源代码中搜索所有的 XML 标记,并创建一个XML文档文件。.NET文档生成工具(下文简称为ADB)通过反射程序集及其代码中的XML注释来创建MSDN形式的API文档。

1.ADB2.3的功能特性:

(1)根据程序集及其对应的XML文档文件生成风格类似MSDN的文档,并打包为CHM文件;

(2)将多个程序集对应的文档合并到一个文档中;

(3)自动搜索程序集及其引用的程序集对应的XML文档(包括.Net自带的程序集,如:System.xml);

(4)灵活控制在文档中显示哪些成员(如:只生成公共方法);

(5)界面友好,操作简便。

(6)用户可以根据自己的需要扩展XML标志

(7)用户可以根据自己的需要编写自定义的文档生成器。

2.ADB2.3支持的注释标记

3.ADB2.3使用指南

ADB2.3使用方法如下图所示:

(1)主界面:

(2)批量选择:

4.生成的文档

(1)命名空间页面:

2.类型页面:

3.成员页面:

 

5.开发自定义文档生成器

ADB2.3支持加载用户自定义的文档生成器,用户可根据自己的需求开发文档生成器,下面以开发自定义文档生成器MyBuilder为例,说明如何开发自定义文档生成器:

⑴目标:

开发一个自定义文档生成器,该文档生成器在ADB默认文档生成器基础上扩展以下功能:

a.XML文档注释可以用<image>插入图片;

b.在类型页面和成员页面中增加一个名称为“自定义节”的内容节。

⑵开发步骤

a.点击菜单 工具->生成自定义文档解决方案->扩展XML文档注释,在弹出的对话框中输入文档生成器名称

b.打开工程中的MyBuilder.cs文件,输入以下代码

using System;
using System.Collections.Generic;
using System.Text;
using ADB.Factories;
using Microsoft.VisualBasic.FileIO;

namespace CustomBuilder
{
    /// <summary>
    /// MyBuilder
    /// </summary>
    public class MyBuilder : ADB.Factories.MSDNStyleCHMDocumentBuilder
    {
        static PageSection[] _memberPageSections, _typePageSections;

        public MyBuilder(IGetData data, IInteract interact)
            : base(data, interact)
        {
            //base.MemberPageSections为页面原有的节,将自定义节插入到页面的最后
            _memberPageSections = new PageSection[base.MemberPageSections.Length + 1];
            base.MemberPageSections.CopyTo(_memberPageSections, 0);
            _memberPageSections[base.MemberPageSections.Length] = 
                new PageSection("自定义节", PageSectionType.FromXML, "CustomSection");

            //base.MemberPageSections为页面原有的节,将自定义节插入到页面的最后
            _typePageSections = new PageSection[base.TypePageSections.Length + 1];
            base.TypePageSections.CopyTo(_typePageSections, 0);
            _typePageSections[base.TypePageSections.Length] = 
                new PageSection("自定义节", PageSectionType.FromXML, "CustomSection");
        }

        //重写基类的MemberPageSections属性
        public override PageSection[] MemberPageSections
        {
            get
            {
                return _memberPageSections;
            }
        }

        //重写基类的TypePageSections属性
        public override PageSection[] TypePageSections
        {
            get
            {
                return _typePageSections;
            }
        }

        protected override string GetTag(System.Xml.XmlElement elem, string xmlFile)
        {
            switch (elem.Name)
            {
            case "CustomSection":
                {
                    //生成"自定义节"的内容
                    return GetInnerTags(elem, xmlFile);
                }
            case "image":
                {
                    StringBuilder tag = new StringBuilder();
                    string src = elem.GetAttribute("src");
                    if (!string.IsNullOrEmpty(src))
                    {
                        try
                        {
                            //将图片拷贝到生成页面的目录中
                            //(通过属性HtmlFileDirectory获取保存页面的目录)
                            FileSystem.CopyFile(
                                xmlFile + "\\" + src, 
                                HtmlFileDirectory + "\\" + src, 
                                true
                            );
                        }
                        finally
                        {
                        }
                        //生成HTML标志
                        tag.AppendFormat("<img src='{0}'/>", src);
                    }
                    return tag.ToString();
                }
            default:
                {
                    //其它标志由基类处理
                    return base.GetTag(elem, xmlFile);
                }
            }
        }
    }
}

c.点击调试按钮调试自定义文档生成器 

⑶测试

由于测试的类及其XML注释:

namespace ClassLibrary1
{
    /// <summary>
    /// Class摘要
    /// </summary>
    /// <CustomSection>
    /// 自定义的节
    /// <image src="1.gif"/>
    /// </CustomSection>
    public class Class1
    {
    }
}

用自定义文档生成器MyBuilder生成的文档

⑷让ADB启动时自动加载文档生成器

ADB目录下新建目录MyBuilder,并将MyBuilder.dllMyBuilder.builder拷贝到该文件夹中

posted @ 2008-09-01 12:24 卢春城 阅读(5321) 评论(83)  编辑 收藏 网摘 所属分类: 软件

  回复  引用  查看    
#1楼2008-09-01 12:27 | yyww      
lz这个和SandCastle有啥区别
  回复  引用  查看    
#2楼2008-09-01 12:29 | clefoo      
一个官方,一个民用
  回复  引用  查看    
#3楼[楼主]2008-09-01 12:40 | 卢春城      
@yyww
1.貌似SandCastle只能为单个程序集生成文档,而ADB可以合并多个程序集;

2.ADB可以自动搜索程序集及其引用的程序集对应的XML文档(包括.Net自带的程序集,如:system.xml),因此可以为继承的方法添加说明;

3.灵活控制生成哪些成员。

  回复  引用  查看    
#4楼2008-09-01 12:43 | clefoo      
支持lz
  回复  引用  查看    
#5楼2008-09-01 12:44 | clefoo      
这个比NDOC好多了
  回复  引用  查看    
#6楼2008-09-01 12:46 | clefoo      
希望LZ开源
  回复  引用  查看    
#7楼[楼主]2008-09-01 12:50 | 卢春城      
@clefoo
过几天再发代码

  回复  引用  查看    
#8楼2008-09-01 12:57 | TerryLee      
@clefoo
NDoc已经停止开发了。

  回复  引用    
#9楼2008-09-01 13:02 | mj2008[未注册用户]
不错!
  回复  引用  查看    
#10楼2008-09-01 13:03 | 长春网球爱好者      
不错,支持.
  回复  引用  查看    
#11楼2008-09-01 13:03 | 簡簡單單..      
强力支持..
  回复  引用  查看    
#12楼2008-09-01 13:14 | 陈晨      
下载试用了下,感觉不错
  回复  引用  查看    
#13楼2008-09-01 13:29 | shenjk      
我蛮笨的,没学会怎么用
  回复  引用    
#14楼2008-09-01 13:36 | 坐忘山水[未注册用户]
很好很强大
  回复  引用  查看    
#15楼2008-09-01 13:46 | 菜菜灰      
支持一下,很不错,把功能在完善完善,不过NDOC简单多了
  回复  引用    
#16楼2008-09-01 13:47 | ccyy[未注册用户]
不错!
  回复  引用  查看    
#17楼2008-09-01 13:53 | 白发先生      
支持lz开源
  回复  引用    
#18楼2008-09-01 13:54 | lovelytigger[未注册用户]
您好,我在加载一个程序集的时候出现"无法加载一个或多个请求的类型",请问这个如何解决???
  回复  引用  查看    
#19楼2008-09-01 14:08 | 寧愿為你       
不错,非常好的东西。。 。。
  回复  引用    
#20楼2008-09-01 14:12 | good[未注册用户]
支持
  回复  引用  查看    
#21楼[楼主]2008-09-01 14:19 | 卢春城      
@lovelytigger
没看到你的程序集,我也不知道为什么

  回复  引用  查看    
#22楼2008-09-01 15:01 | 李永京      
不错的东西
  回复  引用  查看    
#23楼2008-09-01 15:11 | Mr Chai      
我觉得很有意思啊。
  回复  引用  查看    
#24楼2008-09-01 15:12 | 小K      
多谢啊,使用一下
  回复  引用  查看    
#25楼2008-09-01 15:12 | 狼Robot      
不错.
  回复  引用  查看    
#26楼2008-09-01 15:14 | 隨風.NET      
好东西顶下
  回复  引用    
#27楼2008-09-01 15:21 | eugene512[未注册用户]
支持开源,支持继续更新!
  回复  引用  查看    
#28楼2008-09-01 15:26 | 81      
好东西,NDoc停止开发,官方的那个也不怎么好用。
  回复  引用  查看    
#29楼2008-09-01 15:34 | 行知      
我也出现加载一个程序集的时候出现"无法加载一个或多个请求的类型",感觉好像是要把所有引用的程序集放到一个目录下,不知是不是这个原因。
  回复  引用  查看    
#30楼2008-09-01 15:48 | 自由之翼      
支持
  回复  引用  查看    
#31楼2008-09-01 16:08 | Flymouse      
谢谢
  回复  引用  查看    
#32楼[楼主]2008-09-01 16:09 | 卢春城      
@行知
你的程序集引用的其他程序集必须在同一目录下,一般如果你引用了其他的程序集,开发时VS会帮你拷贝到同一目录下

支持VS2008不?
  回复  引用  查看    
#34楼2008-09-01 17:51 | d_alpha      
无法选择程序集,不知道怎么回事?
  回复  引用  查看    
#35楼2008-09-01 18:34 | atomsoft      
@德仔--脚踏实地 用心努力

测试过,支持!

  回复  引用  查看    
#36楼2008-09-01 18:51 | LanceZhang      
非常好,希望lz早日开源
  回复  引用  查看    
#37楼2008-09-01 19:15 | elwin.wang      
严重支持,盼LZ继续努力,做得更完善.
  回复  引用  查看    
#38楼2008-09-01 19:47 | 侯垒      
很好。
  回复  引用  查看    
#39楼2008-09-01 20:15 | 回头望见你      
希望开源,或者搞个这个工具开源网站
  回复  引用  查看    
#40楼2008-09-02 09:10 | 凯锐      
這個不錯的說
  回复  引用  查看    
#41楼2008-09-02 12:05 | chegan      
好像有问题哦,添加一个dll说不正确的信息
  回复  引用    
#42楼2008-09-02 13:44 | manhoo[未注册用户]
非常好的东西.
  回复  引用    
#43楼2008-09-03 00:09 | woog离线[未注册用户]
非常值得期待。
  回复  引用  查看    
#44楼2008-09-03 13:32 | andy.wu      
太棒了(虽然我还没用),支持。
  回复  引用    
#45楼2008-09-10 20:52 | iukiuk[未注册用户]
还不能支持泛型类型,不过已经做的很好了
  回复  引用  查看    
#46楼[楼主]2008-09-10 21:44 | 卢春城      
@iukiuk
感谢你的关注,我会尽快找出问题

  回复  引用  查看    
#47楼2008-09-17 17:55 | 我的自留地      
呵呵,没有更新了吗??
  回复  引用  查看    
#48楼2008-09-23 10:25 | 哈密瓜牌牛奶      
按照:
/// <summary>
/// 开通系统
/// </summary>
/// <param name="NodeCode">The Node Code</param>
/// <param name="PortName">The Port Name</param>
/// <returns></returns>
public PortReport AddPort(string NodeCode, string PortName)
这种方式注释,但是生成chm后注释出不来

  回复  引用  查看    
#49楼[楼主]2008-09-23 17:48 | 卢春城      
@哈密瓜牌牛奶
试过了,没有问题

  回复  引用  查看    
#50楼2008-09-24 10:23 | 哈密瓜牌牛奶      
嗯,没有问题了,原来要在项目配置里面要吧XML文档注释勾上就可以了。
  回复  引用    
#51楼2008-09-24 15:49 | Happy178[未注册用户]
可是在Web层的时候生成没有注释要如何改,比如BLL层有得钩XML文档注释的勾,而WEB层没有啊.
  回复  引用  查看    
#52楼2008-10-07 11:45 | 尘尘      
貌似在有out的时候就出错?
  回复  引用  查看    
#53楼[楼主]2008-10-12 00:26 | 卢春城      
@尘尘
已找到问题,我会在下一版本修正

  回复  引用    
#54楼2008-11-04 15:27 | zealhuang[未注册用户]
强牛,顶你
marking

  回复  引用    
#55楼2008-11-24 12:51 | 随风2008[未注册用户]
.net文档生成工具ADB 生成后无注释的问题:
在VS的 项目属性-生成 中,勾选 XML文档文件 即可.

希望程序在生成的时候能给用户一个提示.VS默认没有选中该项,一开始我也纳闷呢,怎么没有注释呢

  回复  引用  查看    
#56楼[楼主]2008-11-30 16:31 | 卢春城      
--引用--------------------------------------------------
随风2008: .net文档生成工具ADB 生成后无注释的问题:
在VS的 项目属性-生成 中,勾选 XML文档文件 即可.

希望程序在生成的时候能给用户一个提示.VS默认没有选中该项,一开始我也纳闷呢,怎么没有注释呢
--------------------------------------------------------

感谢您的建议,最新版本已经添加这一功能


  回复  引用    
#57楼2008-12-08 16:05 | 陈耀(湖北)[未注册用户]
谢谢楼主
  回复  引用    
#58楼2008-12-29 17:00 | 莫然[未注册用户]
窗口最好能够最大化,要不程序集中的东西多了看起来费劲,改完了告诉我,我会一直支持你的!
  回复  引用  查看    
#59楼[楼主]2008-12-29 19:14 | 卢春城      
@莫然
Thanks

  回复  引用    
#60楼2009-02-13 09:06 | 游客过客[未注册用户]
生成的文档没有带注释....
  回复  引用    
#61楼2009-02-13 10:16 | yong131[未注册用户]
有没有生成数据库字段的文档?
  回复  引用    
#62楼2009-02-13 21:06 | bitwolaiye[未注册用户]
2.2的时候才看到兄弟的工具
这没过多久就看到2.3真是感动.
有3个问题
1.范型的文档生成完了总是名称不对,比如List<>总被生成为List`1,是因为.net的framework的问题么?
2.枚举类型在成员下的公共字段中会多一个value__,不知道问题是否同上?
3.如果程序集中需要针对比较多类生成不同的部分内容时,如何保存下每次的选择呢?像我一个程序集有几十个类,每次.chm需要重新生成时都需要重新挨个类勾选一下(因为各个类需要生成文档的内容不一致),很苦恼

渴望兄弟答复

  回复  引用  查看    
#63楼[楼主]2009-02-13 21:53 | 卢春城      
@bitwolaiye
感谢你的支持,以后的版本我会注意这些问题

  回复  引用    
#64楼2009-02-28 15:20 | limeng[未注册用户]
LZ <seealso> 和<see>的生成不了啊
  回复  引用  查看    
#65楼[楼主]2009-03-01 13:04 | 卢春城      
@limeng
目前不支持<seealso>
<see>指定的类必须在该文档中才会生成链接

  回复  引用    
#66楼2009-03-02 10:47 | limeng[未注册用户]
@卢春城
谢谢您的回复。
但我试了<seealso> 和
<see>都不支持,指向是本类中的方法,或字段

另,如果A类中包含B类,则B类被忽略了,生成CHM中找不到B类

  回复  引用  查看    
#67楼[楼主]2009-03-02 10:59 | 卢春城      
--引用--------------------------------------------------
limeng: @卢春城
谢谢您的回复。
但我试了&lt;seealso&gt; 和
&lt;see&gt;都不支持,指向是本类中的方法,或字段

另,如果A类中包含B类,则B类被忽略了,生成CHM中找不到B类
--------------------------------------------------------
如果要生成嵌套类B,需选中B,A和B是独立对待的

  回复  引用    
#68楼2009-03-02 11:33 | limeng[未注册用户]
哦,我知道了,不好意思,之前没看到可以选类那个地方,太感谢了!

  回复  引用  查看    
#69楼2009-04-06 18:25 | 淡然      
生成文件的最后时刻,提示系统找不到指定的文件
怎么回事啊?

  回复  引用  查看    
#70楼[楼主]2009-04-06 20:12 | 卢春城      
@淡然

是不是使用了<img>,<file>或带有 src属性的<code>标志,如果是,src路径必须是相对于xml文件的
例如
xml文件全路径是:C:\doc\asm.xml
<img>指定文件路径是:C:\doc\image\img.jpg
则src=image\img.jpg

  回复  引用    
#71楼2009-04-09 17:45 | 事成[未注册用户]
--引用--------------------------------------------------
Happy178: 可是在Web层的时候生成没有注释要如何改,比如BLL层有得钩XML文档注释的勾,而WEB层没有啊.
--------------------------------------------------------
WEB层的VB.Net程序怎么生成XML,还望见告。

  回复  引用  查看    
#72楼[楼主]2009-04-09 19:52 | 卢春城      
唯一的方法就是将Web中的代码放到一个类库中去
  回复  引用    
#73楼2009-04-10 08:39 | 事成[未注册用户]
--引用--------------------------------------------------
卢春城: 唯一的方法就是将Web中的代码放到一个类库中去
--------------------------------------------------------
谢谢,这样工作量很大,整个Web工程有很多东西,都要重新建个工程一起挪过去啊。我试一下。

  回复  引用    
#74楼2009-04-10 09:42 | 事成[未注册用户]
把Web工程的页面引过来后,页面上的控件都识别不了,把该参照的都参照了,还是遍地Error,楼主还有办法么?
  回复  引用  查看    
#75楼[楼主]2009-04-10 10:00 | 卢春城      
@事成
沒有其他方法了,VS不提供为WEB层生成XML文档注释的功能

  回复  引用    
#76楼2009-04-10 10:55 | 事成[未注册用户]
谢谢楼主,为什么把WEB工程做的生成不了呢,微软真是奇怪。
  回复  引用    
#77楼2009-04-22 17:43 | 支持楼主[未注册用户]
楼主,什么时间开源?都等了快半年了!
  回复  引用  查看    
#78楼[楼主]2009-04-22 18:58 | 卢春城      
源代码不是可以下载了吗?
  回复  引用    
#79楼2009-04-23 10:23 | 支持楼主[未注册用户]
在你的园子里没有看到下载的地址!不好意思,能不能发到回复里!
  回复  引用    
#80楼2009-04-23 10:24 | 支持楼主[未注册用户]
最新版本的源码,上面的2.2的我之前就看到了。呵呵---
可能是我没有说清楚哦

  回复  引用  查看    
#81楼[楼主]2009-04-23 10:39 | 卢春城      
@支持楼主
等我整理一下...

  回复  引用    
#82楼2009-04-23 16:46 | 支持楼主[未注册用户]
期待ing-----
  回复  引用  查看    
#83楼[楼主]2009-04-23 20:26 | 卢春城      
@支持楼主
源代码已更新到最新版本

  回复  引用  查看    
#84楼2009-07-03 10:03 | 白发先生      
希望早点支持函数重载的显示
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1281085




相关文章:

相关链接: