1.介绍

Sandcastle是微软提供的开源的,用于生成.net文档帮助的工具。

源代码路径:https://github.com/EWSoftware/SHFB,进去后能找到Relase版本的路径(https://github.com/EWSoftware/SHFB/releases

官方帮助文档:http://ewsoftware.github.io/SHFB

(其中xml的标签使用:http://ewsoftware.github.io/XMLCommentsGuide/)

2.安装

1.安装前关闭VS,直接点击安装包进行安装

3.开始

1.打开待生成文档的工程的xml输出

  工程属性中的“生成-输出-xml文档文件”。生成一下,就会生成它的xml文档

2.创建工程

  以vs2019为例,在解决方案中添加 Sandcastle Help File Builder Project

  解决方案管理器中,选中Documentation Sources,右键”Add Documentation Sources”,选择目标工程的dll和xml文件,生成即可。

4.优化配置

1.工程属性中设置语言、标题等

  例:默认为英文,改为中文。属性里的“Help File”

2.支持语言,生成的文件格式

  默认支持的F#、VB,没什么用,可去掉勾选。

  默认生成chm文件,其他格式也挺有用的。(mshc文件与VS的融合很好,选中内容按F1就可启动搜索,如果需要可勾上)

3.打开报警,把报警全解决掉。

  这样才不会出现文档有的字段没有解释,解释与参数对不上等问题

  文档应该只支持按///生成的那种注释

  再搜索一下“></param>”,找到所有没给参数注释写内容的地方,处理掉

4.关闭命名空间注释的报警

  命名空间一般都不给它注释的,因为往往多个文件用同一个命名空间,在哪里注释?但是不给它注释,默认情况下就会出现上图这样的。

解决办法:

  工程属性中,Missing Tags,去掉“Namespace documentation”的勾选.

5.Xml文档注释

  以下列出一部分在 Sandcstle 可用文档注释。如果需要获取全部可用文档注释,则请参考 C# XML 文档注释和 NDoc 标记。Sandcastle 支持所有 C# XML 文档注释和部分 NDoc 标记,暂不支持用户自定义标记。

标记

说明

<a>

<a href="url">Sample</a>表示一个超级链接。

<b>

<b>...</b> 表示加粗。

<c>

<c>...</c> 代码引用。

<code>

<code [ lang="VB | VB.NET | C# | C++ | J#" source="path" region="region" ]>...</code> 表示一段代码引用。

<example>

<example>...</example> 表示示例。

<note>

<note type="caution | implementnotes | callers | inheriters">...</note> 表示备注。

<list>

<list type="bullet | number | table">...</list> 表示一个列表。

<para>

<para> 表示一个段落。

<param>

<param name="">...</param> 表示参数说明。

<paramref>

<paramref cref="" /> 表示一个参数的引用。

<summary>

<summary> 表示摘要。

<typeparam>, <typeparamref>

<typeparam name="T"> 表示一个类型参数。

<event>

<event> 表示方法触发的一个事件说明。

<remarks>

<remarks> 表示额外的备注。

<threadsafety>

<threadsafety instance="true | false" static="true | false"> 表示线程安全说明。

<value>

<value> 表示属性的值说明。

<returns>

<returns type="type"> 表示方法的返回值说明。

<preliminary>

表示该文档是预发行版本。

<overload>

表示方法被重载。

6.标签示例

  具体参考代码中///注释标签形式

  1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Data;
5 using System.Data.SqlClient;
6 using System.Data.OracleClient;
7 using System.Data.Common;
8
9 namespace Heading.Data
10 {
11 /// <summary>
12 /// 数据库类型
13 /// </summary>
14 public enum DbmsType
15 {
16 /// <summary>
17 /// SqlServer
18 /// </summary>
19 SqlServer,
20
21 /// <summary>
22 /// Oracle
23 /// </summary>
24 Oracle,
25 }
26
27 /// <summary>
28 /// 存放应用程序全局资源和公共函数的静态类。
29 /// </summary>
30 /// <remarks>
31 /// <c>DataHelper</c> 包含对数据库的全局操作集合,包括打开和关闭连接、创建事务等。此类支持以下 Microsoft SQL Server 和 Oracle 版本。
32 /// <list type="table">
33 /// <listheader><item>Microsoft SQL Server 版本</item><description>Oracle 版本</description></listheader>
34 /// <item><item><list type="bullet">
35 /// <item>Microsoft SQL Server 2000</item>
36 /// <item>Microsoft SQL Server 2005</item>
37 /// <item>Microsoft SQL Server 2008</item>
38 /// </list></item>
39 /// <description><list type="bullet">
40 /// <item>Oracle 8i</item><item>Oracle 9i</item><item>Oracle 10g</item><item>Oracle 11g</item>
41 /// </list></description></item>
42 /// </list>
43 /// </remarks>
44 /// <example>
45 /// 以下示例展示如何使用 <c>DataHelper</c> 类执行数据库事务操作。
46 /// <code lang="C#" source="SamplesCSharpDataHelper.cs" region="DataHelper" />
47 /// <note type="caution">
48 /// <para>
49 /// 此类是静态类。可在应用程序全局范围内使用,在使用此类的任何方法之前,您必须先初始化 <c>DataHelper</c>.Connection 属性。
50 /// 有关 Connection 属性的信息,请参见 <see cref="T:System.Data.Common.DbConnection" />。
51 /// </para>
52 /// </note>
53 /// </example>
54 /// <seealso cref="DbmsType" />
55 public static class DataHelper
56 {
57 // 为数据库设置连接字符串。
58 private static DbConnection connection;
59
60 /// <summary>
61 /// 获取用于存储事务的 DbTransaction。
62 /// </summary>
63 public static DbTransaction Transaction { get { return transaction; } }
64 private static DbTransaction transaction;
65
66 /// <summary>
67 /// 获取或设置数据库连接。
68 /// </summary>
69 public static DbConnection Connection { get { return connection; } set { connection = value; } }
70
71 /// <summary>
72 /// 获取或设置数据库连接类型。
73 /// </summary>
74 public static DbmsType ConnectionType
75 {
76 get { return connectionType; }
77 set
78 {
79 switch (value)
80 {
81 case DbmsType.Oracle:
82 CloseConnection();
83 connection = new OracleConnection();
84 break;
85 case DbmsType.SqlServer:
86 CloseConnection();
87 connection = new SqlConnection();
88 break;
89 }
90 connectionType = value;
91 }
92 }
93 private static DbmsType connectionType;
94
95 /// <summary>
96 /// 在指定的连接上下文中执行 SQL 命令。
97 /// </summary>
98 /// <param name="command">需要执行的 T-SQL 语句。</param>
99 /// <returns>执行语句后影响的行数。</returns>
100 public static int ExecuteSqlCommand(string command)
101 {
102 RaiseConnectionNotOpenedException();
103 using (DbCommand cmd = Connection.CreateCommand())
104 {
105 cmd.Transaction = transaction;
106 cmd.CommandText = command;
107 return cmd.ExecuteNonQuery();
108 }
109 }
110
111 /// <summary>
112 /// 在指定的连接上下文中执行 SQL 命令。
113 /// </summary>
114 /// <param name="command">需要执行的 T-SQL 语句。</param>
115 /// <param name="param">格式化字符串。</param>
116 /// <returns>执行语句后影响的行数。</returns>
117 public static int ExecuteSqlCommand(string command, params object[] param)
118 {
119 return ExecuteSqlCommand(string.Format(command, param));
120 }
121
122 /// <summary>
123 /// 在指定的连接上下文中执行 SQL 命令,并返回包含数据集的 DbDataReader。
124 /// </summary>
125 /// <param name="command">需要执行的 T-SQL 语句。</param>
126 /// <returns>存放执行结果的 DbDataReader。</returns>
127 public static DbDataReader ExecuteSqlReader(string command)
128 {
129 RaiseConnectionNotOpenedException();
130 using (DbCommand cmd = Connection.CreateCommand())
131 {
132 cmd.Transaction = transaction;
133 cmd.CommandText = command;
134 return cmd.ExecuteReader();
135 }
136 }
137
138 /// <summary>
139 /// 在指定的连接上下文中执行 SQL 命令,并返回包含数据集的 DbDataReader。
140 /// </summary>
141 /// <param name="command">需要执行的 T-SQL 语句。</param>
142 /// <param name="param">格式化字符串。</param>
143 /// <returns>存放执行结果的 DbDataReader。</returns>
144 public static DbDataReader ExecuteSqlReader(string command, params object[] param)
145 {
146 return ExecuteSqlReader(string.Format(command, param));
147 }
148
149 /// <summary>
150 /// 打开数据库连接,如果连接已经打开,则不会再次打开。
151 /// </summary>
152 public static void OpenConnection()
153 {
154 if (connection != null && connection.State == ConnectionState.Closed)
155 connection.Open();
156 }
157
158 /// <summary>
159 /// 关闭数据库连接。如果连接已经关闭,则不会再次关闭。
160 /// </summary>
161 public static void CloseConnection()
162 {
163 if (connection != null && connection.State == ConnectionState.Open)
164 connection.Close();
165 }
166
167 /// <summary>
168 /// 开始一个 SQL 事务,并将 Transaction 属性设置为当前活动的 DbTransaction。
169 /// </summary>
170 public static void BeginTransaction()
171 {
172 RaiseConnectionNotOpenedException();
173 transaction = Connection.BeginTransaction();
174 }
175
176 /// <summary>
177 /// 回滚当前活动的 SQL 事务。
178 /// </summary>
179 public static void Rollback()
180 {
181 RaiseTransactionException();
182 transaction.Rollback();
183 }
184
185 /// <summary>
186 /// 提交当前活动的 SQL 事务。
187 /// </summary>
188 public static void Commit()
189 {
190 RaiseTransactionException();
191 transaction.Commit();
192 try
193 {
194 transaction.Dispose();
195 }
196 finally { transaction = null; }
197 }
198
199 /// <summary>
200 /// 检查当前数据库连接是否存在指定的表。
201 /// </summary>
202 /// <param name="tableName">表名称。</param>
203 /// <returns>如果存在此对象则返回 true。否则返回 false。</returns>
204 public static bool TableExists(string tableName)
205 {
206 RaiseConnectionNotOpenedException();
207 string command = null;
208 switch (connectionType)
209 {
210 case DbmsType.Oracle:
211 command = @"SELECT 1 FROM user_objects WHERE UPPER(object_name) = UPPER('{0}') " +
212 "AND object_type = 'TABLE'";
213 break;
214 case DbmsType.SqlServer:
215 command = @"SELECT 1 FROM sysobjects WHERE Name = N'{0}' AND Type = N'U'";
216 break;
217 }
218
219 using (DbDataReader dr = ExecuteSqlReader(command, tableName))
220 {
221 return dr.HasRows;
222 }
223 }
224
225 /// <summary>
226 /// 检查当前数据库连接是否存在指定的存储过程。
227 /// </summary>
228 /// <param name="tableName">存储过程名称。</param>
229 /// <returns>如果存在此对象则返回 true。否则返回 false。</returns>
230 public static bool StoredProcedureExists(string tableName)
231 {
232 RaiseConnectionNotOpenedException();
233
234 string command = null;
235 switch (connectionType)
236 {
237 case DbmsType.Oracle:
238 command = @"SELECT 1 FROM user_objects WHERE UPPER(object_name) = UPPER('{0}') " +
239 "AND object_type = 'FUNCTION' OR object_type = 'PROCEDURE'";
240 break;
241 case DbmsType.SqlServer:
242 command = @"SELECT 1 FROM sysobjects WHERE Name = N'{0}' AND Type = N'P'";
243 break;
244 }
245
246 using (DbDataReader dr = ExecuteSqlReader(command, tableName))
247 {
248 return dr.HasRows;
249 }
250 }
251
252 private static void RaiseConnectionNotOpenedException()
253 {
254 if (Connection == null)
255 throw new Exception("输据库连接对象未设置。");
256 if (Connection.State != ConnectionState.Open)
257 throw new Exception("输据库连接对象未打开。");
258 }
259
260 private static void RaiseTransactionException()
261 {
262 if (transaction == null) throw new Exception("Transaction 属性没有初始化。请先调用 BeginTransaction。");
263 }
264
265 private static int InternalExecuteCommand(string command)
266 {
267 RaiseConnectionNotOpenedException();
268 using (DbCommand cmd = Connection.CreateCommand())
269 {
270 cmd.Transaction = transaction;
271 cmd.CommandText = command;
272 return cmd.ExecuteNonQuery();
273 }
274 }
275
276 private static int InternalExecuteCommand(string command, params object[] param)
277 {
278 return InternalExecuteCommand(string.Format(command, param));
279 }
280
281 private static DbDataReader InternalExecuteReader(string command)
282 {
283 RaiseConnectionNotOpenedException();
284 using (DbCommand cmd = Connection.CreateCommand())
285 {
286 cmd.Transaction = transaction;
287 cmd.CommandText = command;
288 return cmd.ExecuteReader();
289 }
290 }
291
292 private static DbDataReader InternalExecuteReader(string command, params object[] param)
293 {
294 return InternalExecuteReader(string.Format(command, param));
295 }
296 }
297 }

工程属性打开xml文档输出,并将生成的xml添加到Sandcastle工程中,生成Sandcastle工程就可以得到chm文档了!

 1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Data;
5 using System.Data.SqlClient;
6 using System.Data.OracleClient;
7 using System.Data.Common;
8
9 namespace Heading.Data
10 {
11 #region DataHelper
12
13 /// <summary>
14 /// 获取或设置数据库连接。
15 /// </summary>
16 public static DbConnection Connection { get { return connection; } set { connection = value; } }
17
18 /// <summary>
19 /// 在指定的连接上下文中执行 SQL 命令。
20 /// </summary>
21 /// <param name="command">需要执行的 T-SQL 语句。</param>
22 /// <returns>执行语句后影响的行数。</returns>
23 public static int ExecuteSqlCommand(string command)
24 {
25 RaiseConnectionNotOpenedException();
26 using (DbCommand cmd = Connection.CreateCommand())
27 {
28 cmd.Transaction = transaction;
29 cmd.CommandText = command;
30 return cmd.ExecuteNonQuery();
31 }
32 }
33 private static void RaiseConnectionNotOpenedException()
34 {
35 if (Connection == null)
36 throw new Exception("输据库连接对象未设置。");
37 if (Connection.State != ConnectionState.Open)
38 throw new Exception("输据库连接对象未打开。");
39 }
40 #endregion

效果

-->The End 2020.7.6

chm文档生成->Sandcastle使用帮助的更多相关文章

  1. 生成chm文档工具- Sandcastle -摘自网络

    Sandcastle是微软官方的文档生成工具,NDoc开发停止后,这个貌似也是唯一的一个这方面的工具.它从dll文件及其xml注释文件能够 生成完整的帮助文档,支持多种生成格式(Helpe1x:chm ...

  2. 最简单,最实用的数据库CHM文档生成工具——DBCHM

    DBCHM支持SqlServer/MySql/Oracle/PostgreSQL等数据库的表列批注维护管理. DBCHM有以下几个功能 表,列的批注可以编辑保存到数据库. 表,列的批注支持通过pdm文 ...

  3. 如何生成项目的chm文档

    如何生成项目的chm文档 2014-11-30 Generate .chm based documentation of your project using SandCastle  tool

  4. IDEA生成doc文档-生成chm文档

    首先,打开IDEA,并找到Tools -> Generate JavaDoc- 可供查询的chm比那些HTML页面好看多了. 如果您用过JDK API的chm文档,那么您一定不会拒绝接受其它第三 ...

  5. Sandcastle----强大的C#文档生成工具

    最近客户索要产品的二次开发类库文档,由于开发过程中并没有考虑过此类文档,而且项目规范比较,持续时间比较长,经手人比较多,还真是麻烦,如果人工制作文档需要是一个比较大的工程.还好有这个文档生成工具,能够 ...

  6. API文档生成(c# dll)

    一.Sandcastle 这个是c#类库方法根据注释生成帮助文档的工具,我们经常会遇到把DLL或者API提供给别人调用的情况,通过在方法中添加注释,然后再用Sandcastle 来自动生成文档给调用者 ...

  7. 微软开源全新的文档生成工具DocFX

    微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文档之外,而且还有语法支持你加入其他的文 ...

  8. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...

  9. (转)Doxygen文档生成工具

    http://blog.csdn.net/lostaway/article/details/6446786 Doxygen 是一个支持 C/C++,以及其它多种语言的跨平台文档生成工具.如同 Java ...

  10. 制作Aspose CHM文档的过程记录

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

随机推荐

  1. Jmeter 之在linux中监控Memory、CPU、I/O资源等操作方法

    在做性能测试时,单纯的只看响应时间.错误率.中间值远远不够的,有时需要监控服务cpu.内存等指标来判断影响性能的瓶颈在哪. 操作步骤: 一.Linux下配置jmeter环境 1.在linux环境下安装 ...

  2. nacos注册中心单节点ap架构源码解析

    一.注册流程 单nacos节点流程图如下: 流程图可以知,Nacos注册流程包括客户端的服务注册.服务实例列表拉取.定时心跳任务:以及服务端的定时检查服务实例任务.服务实例更新推送5个功能. 服务注册 ...

  3. [LeetCode]对角线遍历

    题目 代码 class Solution { public: vector<int> findDiagonalOrder(vector<vector<int>>&a ...

  4. Java学习笔记 :2021年12月31日 上午

    Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...

  5. 解决前端发送post 请求出现403,cancled等问题

    问题一:页面初始加载,部分接口首次请求options是200,然后第二次post请求cancled状态 1. 检查console控制台报错,如果是接口问题,就不用操心了 2.如果是其他报错,那么就不用 ...

  6. 今天遇到的报错Babel noteThe code generator has deoptimised the styling of ...as it exceeds the max of 500KB.

    解决办法如下: { test: /.js$/, exclude: /node_modules/, use: 'babel-loader' } 然并卵,我已经设置了这个东西了,突然发现我的文件并不在no ...

  7. vue 中引入iframe,动态设置其src,遇到的一些小问题总结

    1.重置其样式,去掉外框以及滚动条等 <iframe id="myIframe" ref="iframe_a" :src="mySrc" ...

  8. vulnhub靶场之FUNBOX: GAOKAO

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Funbox: GaoKao,下载地址:https://download.vulnhub.com/funbox/FunboxGaoKao.ova ...

  9. 操作系统linux

    Linux命令概览 一.哪些地方可以学到Linux? 1.Linux中国 Linux中国绝对是学习Linux的好去处,各种资讯.文章.技术都有,而且更新及时,质量也很高,学Linux一定要去看啊. 2 ...

  10. 【随笔记】XR872 Codec 驱动移植和应用程序实例(附芯片调试方法)

    XR872 的 SDK 是我目前接触过那么多款 MCU 的 SDK 中,唯一一个将框架和 RTOS 结合的非常完美的 SDK .无论是代码风格还是框架的设计,看起来都很赏心悦目,而且是源码开源.希望能 ...