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

最新文章

  1. Hibernate操作指南-实体与常用类型的映射以及基本的增删改查(基于注解)
  2. jQuery Length属性
  3. OpenCV学习笔记(一)——OpenCV安装
  4. HDU 1839
  5. ng-template寄宿方式
  6. Teredo 是一项 IPv6/IPv4 转换技术
  7. highcharts报表插件之expoting参数的使用
  8. Linux--/tmp目录文件重启后自动删除
  9. ActionBarCompat
  10. NUnit - 使用感受
  11. Javascript兑现图片预加载【回调函数,多张图片】 (转载)
  12. 利用phpcms-v9站群功能建立多个分站
  13. C++三种野指针及应对/内存泄露
  14. db2 常见错误以及解决方案[ErrorCode SQLState]
  15. 训练赛-Eyad and Math
  16. JS进阶之---函数,立即执行函数
  17. python:&#39;ascii&#39; codec can&#39;t encode character
  18. GUI程序设计
  19. Multiline ComboBox
  20. andorid手机电脑操作

热门文章

  1. vue项目引入echarts柱状图
  2. 【转载】SQL SERVER2008 修改数据库名相关的脚本
  3. WCH以太网相关芯片资料总结
  4. C#应用程序配置文件(XML序列化) - 开源研究系列文章
  5. vue 中安装并使用echart
  6. linux 基础之输入输出重定向
  7. Python 常用库函数
  8. 最好用的在线图片压缩工具——TinyPNG
  9. react 高效高质量搭建后台系统 系列 —— 系统布局
  10. Java 进阶P-1.1+P-1.2