zoukankan      html  css  js  c++  java
  • chm文档生成->Sandcastle使用帮助

    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

  • 相关阅读:
    CloudStack 4.2 与CloudStack 4.1二级存储API发生变化
    添加虚拟机磁盘扩容步骤
    NAT概述
    CloudStack全局参数
    在 Web 项目中应用 Apache Shiro
    使用 Spring Security 保护 Web 应用的安全
    获取浏览器的homepage
    剑指offer系列——2.替换空格
    剑指offer系列——1.二维数组中的查找
    JDK下载需要Oracle账号登录问题
  • 原文地址:https://www.cnblogs.com/tuhong/p/13254497.html
Copyright © 2011-2022 走看看