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

  • 相关阅读:
    中国石油昆仑加油卡
    157 01 Android 零基础入门 03 Java常用工具类01 Java异常 01 异常介绍 02 异常内容简介
    156 01 Android 零基础入门 03 Java常用工具类01 Java异常 01 异常介绍 01 Java常用工具类简介
    155 01 Android 零基础入门 02 Java面向对象 07 Java多态 07 多态知识总结 01 多态总结
    154 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 05 匿名内部类
    153 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 04 方法内部类
    152 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 03 静态内部类
    151 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 02 成员内部类
    150 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类概述 01 内部类概述
    149 01 Android 零基础入门 02 Java面向对象 07 Java多态 05 接口(重点)07 接口的继承
  • 原文地址:https://www.cnblogs.com/tuhong/p/13254497.html
Copyright © 2011-2022 走看看