[源代码] - C#代码搜索器 - 续
在前文 [源代码] - C#代码搜索器 中我开发了一个代码搜索器. 我对其做的最后改动是将索引保存到磁盘中, 以备今后使用.
如今, 我在工作中又接到一项新任务: 有一个大项目, 其中10个负责数据访问的service即将被淘汰, 将会替换成entity framework的方式. 这10个service一共有近130个operation. 项目中所有调用这些operation的地方都必须被替换成新的EF方式. 整个项目有47902个cs文件. 现在要做个分析, 找到所有需要修改的地方.
稍作思考, 开工!
先创建一个console project, 引入WEBUS2.0 SDK. 将10个service和130个operation的信息放到字符串数组中:
static string[] DS_OP_List = new string[] {
"xxxxDS.CalculatePilotCloseOut",
"xxxxDS.CreatexxFirstAcont",
"xxxxDS.CreatexxUnallocatedULD",
"xxxxDS.xxCargoGetTare",
"xxxxDS.xxCargoCreateAbulk",
"xxxxDS.xxCargoDeleteAbulk",
"xxxxDS.xxCargoMoveAbulk"
...
}; //共130个, 公司有规定, 所以用xxx替代真实值 :)
然后打开Index (关于如何创建Index请参见前文: [源代码] - C#代码搜索器), 再循环对operation进行搜索:
static void Main(string[] args)
{
IIndexer index = new IndexManager(); //构造索引对象
index.Open(@"C:\xxx\CodeSearch.Index", IndexOpenMode.Read); //以只读方式打开索引
ISearcher se = new IndexSearcher(index); //构造搜索对象
using (CSVFile csv = new CSVFile(@"c:\temp\xx_DS_Analysis.csv")) //将结果保存在csv文件中
{
foreach (var ds_op in DS_OP_List)
{
var key = ds_op.Split('.')[].ToLower(); //从Service.Operation中提取Operation, 比如从xxxxDS.CalculatePilotCloseOut中提取CalculatePilotCloseOut中提取
var hits = se.Search(string.Format("Code=\"{0}\"", key)); //搜索表达式: Code="CalculatePilotCloseOut"
Console.WriteLine("{0}/{1}", key, hits.Count);
foreach (HitDoc hit in hits)
{
csv.Write(ds_op, hit.GetDoc().GetField("FileName").Value.ToString()); //依次输出"服务名", "方法名", "文件名"到csv中
}
}
}
Console.ReadLine();
}
最后上一个生成CSV文件的工具类:
public class CSVFile : IDisposable
{
public string FileName { get; private set; }
private StreamWriter sw = null;
private StreamReader sr = null;
private FileStream fsWrite = null;
private FileStream fsRead = null; public CSVFile(string filename)
: this(filename, Encoding.UTF8, FileMode.OpenOrCreate)
{
} public CSVFile(string filename, FileMode mode)
: this(filename, Encoding.UTF8, mode)
{
} public CSVFile(string filename, Encoding encoding, FileMode mode)
{
this.FileName = filename;
fsWrite = new FileStream(filename, mode, FileAccess.Write, FileShare.Read);
fsWrite.Seek(, SeekOrigin.End);
fsRead = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
sw = new StreamWriter(fsWrite, encoding);
sr = new StreamReader(fsRead, encoding);
} public void Close()
{
sw.Close();
sr.Close();
} public string[] Read()
{
string text = sr.ReadLine();
if (string.IsNullOrEmpty(text))
{
return null;
}
return text.Split(',');
} public string[] FindNext(string startKeyword, StringComparison comparisonType = StringComparison.InvariantCultureIgnoreCase)
{
string[] result = null;
while ((result = this.Read()) != null)
{
if (result[].StartsWith(startKeyword, comparisonType))
{
return result;
}
else
{
continue;
}
}
return null;
} public void Write(params string[] values)
{
StringBuilder sb = new StringBuilder();
foreach (var v in values)
{
sb.Append(v + ",");
}
sw.WriteLine(sb.ToString().Substring(, sb.Length - ));
} public void Dispose()
{
this.Close();
}
}
ok, 大功告成! 运行:

[源代码] - C#代码搜索器 - 续的更多相关文章
- WEBUS2.0 In Action - [源代码] - C#代码搜索器
最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索 ...
- C#代码搜索器
WEBUS2.0 In Action - [源代码] - C#代码搜索器 最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++ ...
- 开源代码搜索器searchcode
项目主页:https://searchcode.com/ 查看API:https://searchcode.com/api/ 关于:https://searchcode.com/about/ Sear ...
- java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 推荐一个C#代码混淆器 .NET Reactor【转】
C#的代码辛苦写出来之后,一个反射工具,就可以完全显露出来. 当然,在做项目时,这个功能还不错.因为我就曾在一个项目上使用C#,没有进行任何混淆.结果在项目二年多之后,需要做一些调整,自己保存的源代码 ...
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 一个比ack速度快n倍的代码搜索工具: ag
一个比ack速度快n倍的代码搜索工具: ag 银搜索者(The Silver Searcher) 一个类似于代码搜索工具ack,着重于速度. Github: https://github.com ...
- html 音乐 QQ播放器 外链 代码 播放器 外链 代码
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha QQ播放器 外链 代码 播放器 外链 代码 ======== 歌曲链接 QQ播放器 外链 ...
- 利用 vuex 实现一个公用搜索器
安装 npm i vuex vuex 的使用 先创建好如图所示的文件: 编写 modules 下的 params.js const param = { state: { params: {} }, m ...
随机推荐
- diahosting的低配vps弱爆了
以下仅为一个用户的心声 上年年中的时候买了dia的128M vps,算是我第一个vps.工作以来,我弄了一个wp博客,所以我在上面搭了apache的服务器,但是由于内存低,挂得也快.后来我换了Ngin ...
- php缓存
APC缓存退出舞台,APCU诞生,OPCACHE升级! 对于php5.5以后的新版本开发,使用apc习惯的开发者可能会发现php.5.5以后找不到了这个组件的更新,尤其是中文phper都找不到合适的资 ...
- C++代码反汇编后的堆栈寄存器EBP和ESP
最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下. ebp--栈底指针 esp- ...
- 国内一些SCM相关论坛站点
SCMROAD: http://www.scmroad.com/forum.php SCMEYE:http://www.scmeye.com/ SVN管家:http://www.svnclub.com ...
- hdu 1757 A Simple Math Problem (矩阵快速幂,简单)
题目 也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目. #include<stdio.h> #include<string.h> #include ...
- POJ 2299 Ultra-QuickSort (排序+数据离散化+求顺序数)
题意:给出一个序列,求至少需要用到多少次操作,才能将序列从小到大排序. 思路: 数据量很大,n<500000,所以用冒泡模拟是超时的. 接下来就想到了求顺序数,总共需要交换的次数为每个数后面有多 ...
- POJ 1922
#include<iostream>cheng da cai zi 11.21 //#include<stdio.h> #include<math.h> using ...
- oracle实现自增列
手动创建了一个表格,但是id字段无法实现自增,查看了一下网上的信息,没有找到满意的答案.一下是自己总结摸索的,仅供参考 第一步:手动创建表和列中的字段 (本例中,表明 T_VIDEO,第一个字段:ID ...
- 设计模式(Design Patterns——可复用面向对象软件的基础
设 计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问 ...
- POJ 3286 How many 0's?
题目链接 题意 :写下m到n之间所有的数,会写多少个0. 思路 :先算0到m的,再算0到n的,最后相减. 网上有位大神是这么推的,看下面.... 首先转化成求 [0, x] 中所有数中,含有的 0 的 ...