C#(CSharp) | VC/C++ | C++Builder | ASP(ASP.NET) | SQL Server | OpenGL | CMM | 网站开发SEO | 数控技术 | 地理信息系统 | WINDOWS操作系统 |
联高软件 > 技术文章 > C#(CSharp) > C#代码注释文字自动提取,与他人共享DLL
VB(ASP)/VB.NET | VC/VC++/VC.NET | C#(CSharp) | C++Builder | Java/JSP | EJB/J2EE |

C#代码注释文字自动提取,与他人共享DLL

发表:联高软件www.legalsoft.com.cn,本文被阅读:1


C# 开发过程中经常需要与大家共享一些 DLL ;但是如果都去看 .CS ,未免太累人了。
如果大家都遵守 XML /// 形式的注释,那末可以用下面的程序一次性提取相关 XML 注释。
别人只需要阅读该程序生成的 HTML 文件即可(或许可以转存到 WORD PDF 等文件中)。

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="System.Web.UI.WebControls.WebParts" %>
<%@ Import Namespace="System.Web.UI.HtmlControls" %>
<%@ Import Namespace="System.Runtime.Remoting" %>
<%@ Import Namespace="System.Runtime.Remoting.Lifetime" %>
<%@ Import Namespace="System.IO" %>
<script language="C#" runat="server">

string pContent;

string KeywordFormat(string inputString)
{
string ks = "public,private,static,class,virtual,override,new,void,string,int,bool,double,float,char,byte,DateTime,set,get";
string[] ka = ks.Split(",");
string outputString = inputString;
foreach(string kg in ka)
{
outputString = outputString.Replace(kg + " ","<font class=\"keyword\">" + kg + " </font>");
outputString = outputString.Replace("("+ kg + ")","(<font class=\"keyword\">" + kg + "</font>)");
outputString = outputString.Replace( kg + "[","<font class=\"keyword\">" + kg + "</font>[");
}
return outputString;
}

protected void Page_Load(object sender, EventArgs e)
{
pContent = "";
// 用于保存结果
StringBuilder sb = new StringBuilder();
// 用于保存注释
StringBuilder sm = new StringBuilder();

// 遍历指定目录下的全部 CS 文件
DirectoryInfo csfile = new DirectoryInfo(Server.MapPath("/App_Code"));
foreach(System.IO.FileInfo fi in csfile.GetFiles())
{
int depth=0;

sb.AppendLine("<div style=\"padding:4px;margin:10px;padding-left:20px;border:solid 1px #AAAAAA;background-color:#F0F0F0\">");
sb.AppendLine("<font class=\"file\"><b>/App_Code/" + fi.Name.ToString() + "</font> ");

StreamReader TxtReader = new StreamReader(Server.MapPath("/App_Code/" + fi.Name.ToString()), System.Text.Encoding.Default);
string FileContent = TxtReader.ReadToEnd();
TxtReader.Close();

// 按行分割
string[] fLines = Regex.Split(FileContent, "\r\n");

// 未进入注释段
int ok=0;
foreach(string ls in fLines)
{
string vls = ls;

// 如果是 namespace
if(vls.Length>10)
{
if(vls.Substring(0,9) == "namespace")
{
sb.AppendLine(" ~~~ <font class=\"namespace\">" + vls.Substring(10) + "</font></b></div>");
depth = 1;
//sb.AppendLine("<div style=\"padding:4px;margin:10px;padding-left:" + (depth*40+20) + "px\">");
continue;
}
}

vls = vls.Trim();
if(vls.Length>=3)
{
if(vls.Substring(0,3) == "///")
{
//sb.AppendLine("<font class=\"summary\">");
// 如果是说明行,跳过即可
if(vls.Contains("<summary>"))
{
// 已进入注释段
ok=1;
sm.Append("功能:");
continue;
}

if(vls.Contains("</summary>"))
{
// 已进入注释段
ok=1;
continue;
}

string gls = vls.Replace("///","").Trim();
if(gls.Length>2)
{
vls = vls.Replace("<param name=\"","参数:");
vls = vls.Replace("\">"," ");
vls = vls.Replace("</param>","");
vls = vls.Replace("<returns></returns>","");
vls = vls.Replace("<returns>","返回:");
vls = vls.Replace("</returns>","");
vls = vls.Replace("///", "").Trim();
if(vls != "")
{
sm.AppendLine(vls.Trim() + "<br>");
}
}
// 已进入注释段
ok = 1;
}
else
{
// 如果已经进入注释段
if(ok==1)
{
// 如果是类
if(ls.Contains(" class ") )
{
sb.AppendLine("<div style=\"padding:4px;margin:4px;padding-left:60px\">");
sb.AppendLine("<font class=\"summary\">" + sm.ToString() + "</font>");
sb.AppendLine("<font class=\"class\">" + KeywordFormat(ls.Trim()) + "</font>");
sb.AppendLine("</div>");
}
else
{
sb.AppendLine("<div style=\"padding:4px;margin:4px;padding-left:100px\">");
sb.AppendLine("<font class=\"summary\">" + sm.ToString() + "</font>");
string kls = ls.Trim();
if(kls.Substring(kls.Length-1,1)==")")
sb.AppendLine( "<font class=\"function\">方法:" + KeywordFormat(kls) + "</font>");
else
sb.AppendLine( "<font class=\"property\">属性:" + KeywordFormat(kls) + "</font>");
sb.AppendLine("</div>");
}
ok=0;
sm.Remove(0,sm.Length);
}
}
}
}
if(depth>0) sb.AppendLine("</div>");
if(depth>1) sb.AppendLine("</div>");
sb.AppendLine("</div>");
}
pContent = sb.ToString();
}

</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>C#类地图:联高软件Legalsoft.com.cn</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<style type="text/css">
<!--

.keyword { font-size:12px;color:#0000EE;font-weight:normal; }
.file { font-size:16px;color:#000000; }
.namespace { font-size:16px;color:#990000; }
.class { font-size:14px;color:#AA0000;font-weight:bold; }
.function { font-size:12px;color:#333333;font-weight:bold; }
.property { font-size:12px;color:#888800;font-weight:bold; }
.summary { font-size:12px;color:#888888; }

-->
</style>
</head>
<body style="font-size:12px;font-family:arial,宋体;line-height:16px;">
<% =pContent %>
</body>
</html>
 联高软件 > 技术文章 > C#(CSharp)
·用C#写ASP.NET搜索蜘蛛代码程序 (2382)
·C#编写GOOGLESITEMAP.XML源代码 (1668)
·如何使用SQLSERVER2000中的XML功能 (1878)
·超强C#图片上传,加水印,自动生成缩略图源代码(联高原创) (3124)
·C#中用SYSTEM.XML读写XML说明与代码 (10190)
·一个代码搞定页面压缩HTTPCOMPRESS源代码 (861)
·C#开发WAP之GOOGLEADSENSE移动广告代码获取源代码[原创] (1389)
·C#开发WAP之GOOGLEADSENSE移动广告代码获取源代码[原创] (1389)
·用C#写ASP.NET搜索蜘蛛代码程序 (2382)
·C#编写GOOGLESITEMAP.XML源代码 (1668)
·超强C#图片上传,加水印,自动生成缩略图源代码(联高原创) (3124)
·C#中用SYSTEM.XML读写XML说明与代码 (10190)
·C#取真实IP地址及分析 (5606)
·C#+DIRECT3D9.0开发实例之月亮绕着地球转 (1987)
·ASP程序员学习C#之超级攻略 (2666)
·通过C#实现集合类纵览.NETCOLLECTIONS及相关技术 (2312)
 最新文章
·一个代码搞定页面压缩HTTPC
·C#开发WAP之GOOGLEADSENSE移
·EXCEL合并文件及合并工作表
·C#代码注释文字自动提取,与
·两种通用分页存储过程的对比
·用C#写ASP.NET搜索蜘蛛代码
·C#编写GOOGLESITEMAP.XML源
·静态HTML代码优化的基本SEO
·几项SEO原则打造良好的网页
·如何使用SQLSERVER2000中的
·超强C#图片上传,加水印,自
·C#中用SYSTEM.XML读写XML说
·C#取真实IP地址及分析
·C#+DIRECT3D9.0开发实例之月
·ASP程序员学习C#之超级攻略
·通过C#实现集合类纵览.NETC
·C#开发WAP程序实例
·C#3.0中对象初始化器和集合
·C#3.0新特性速览
·ASP和ASP.NET的MD5加密中文
·CSS截取固定长度字符串
·简单实用的C#分词源代码(含
·C#高效分页代码(不用存储过
·SERVER.TRANSFER是在两个页
·一个克隆对象的C#基类
·C#语言FTP客户端代码
·递归枚举排列、组合的C#源码
·在C#.NET中跟踪代码的运行过
·ASP.NET2.0中实现跨页面提交
·C#通用的数据操作类
·常用的C#数据检查类
·C#中的域(FIELD)和属性(
·C#编码规范和编程好习惯
·C#编码好习惯
·用C#实现C/S模式下软件自动
·C#参考之访问关键字:BASE、
·C#实现遗传算法模拟花朵的进
·用C#的类实现数据结构的堆栈
·在C#中应用哈希表(HASHTABL
·用C#生成中文汉字验证码的基
·C#.NET支付宝接口
·在C#中利用SHARPZIPLIB进行
·程序员必须知道的SQLSERVER
·360度全方位比较C#和VB
·C#设计模式之建造者(BUILDE
·C#抽象工厂模式的几种实现方
·用设计模式固化C#程序
·数据结构与算法(C#实现)系列
·在C#中建立复杂的、灵活的S
·解读C#中的正则表达式
 热门文章
·程序员必须知道的SQLSERVER
·OpenGL 入门教程(一)
·C#中用SYSTEM.XML读写XML说
·OpenGL基础篇
·使用回调函数(VC & Delphi)
·OpenGL 入门教程(二)
·C++Builder的一些技巧
·数控加工技术试题库
·矩阵相乘的快速算法
·矩阵求逆的快速算法
·C#中SOCKET多线程编程实例
·数控车床加工编程典型实例分
·如何实现进程间数据通讯技术
·数控试题(一)
·第一个三角形:NeHe的OpenG
·数控考题(二)
·选择与反馈 (OpenGL)
·函数调用的几个概念:_stdc
·用C#实现C/S模式下软件自动
·C#高效分页代码(不用存储过
·SERVER.TRANSFER是在两个页
·TServerSocket和TClientSoc
·OpenGL 入门教程(三)
·OpenGL 入门教程(四)
·Dijkstra 最短路径算法的一
·地理信息系统中的常规网络分
·数控机床标准M代码
·数控车床基本坐标关系及几种
·纹理映射:OPENGL 教程-第六
·OpenGL 入门教程(六)