冗余的东西,我的意思是命名空间,因为我知道它们是必要的,但是如果它们有10k,它就不会向表中添加有价值的信息。
可以使用Linq完成吗?
答案 0 :(得分:26)
无需重新发明轮子。看看Visual Studio Code Metrics PowerTool 11.0
概述
代码指标PowerTool是一个命令行实用程序,可计算托管代码的代码度量标准并将其保存到XML文件中。该工具使团队能够在构建过程中收集和报告代码度量标准。计算的代码指标是:
•可维护性指数
•Cyclomatic Complexity
•继承深度
•类耦合
•代码行(LOC)
我知道你说你没有Ultimate,所以我只想告诉你你缺少的东西。
对于其他人,有SourceMonitor
答案 1 :(得分:21)
Visual Studio将为您完成此操作。右键单击您的项目,然后选择Calculate Code Metrics
。
答案 2 :(得分:2)
来自:http://rajputyh.blogspot.in/2014/02/counting-number-of-real-lines-in-your-c.html
private int CountNumberOfLinesInCSFilesOfDirectory(string dirPath)
{
FileInfo[] csFiles = new DirectoryInfo(dirPath.Trim())
.GetFiles("*.cs", SearchOption.AllDirectories);
int totalNumberOfLines = 0;
Parallel.ForEach(csFiles, fo =>
{
Interlocked.Add(ref totalNumberOfLines, CountNumberOfLine(fo));
});
return totalNumberOfLines;
}
private int CountNumberOfLine(Object tc)
{
FileInfo fo = (FileInfo)tc;
int count = 0;
int inComment = 0;
using (StreamReader sr = fo.OpenText())
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (IsRealCode(line.Trim(), ref inComment))
count++;
}
}
return count;
}
private bool IsRealCode(string trimmed, ref int inComment)
{
if (trimmed.StartsWith("/*") && trimmed.EndsWith("*/"))
return false;
else if (trimmed.StartsWith("/*"))
{
inComment++;
return false;
}
else if (trimmed.EndsWith("*/"))
{
inComment--;
return false;
}
return
inComment == 0
&& !trimmed.StartsWith("//")
&& (trimmed.StartsWith("if")
|| trimmed.StartsWith("else if")
|| trimmed.StartsWith("using (")
|| trimmed.StartsWith("else if")
|| trimmed.Contains(";")
|| trimmed.StartsWith("public") //method signature
|| trimmed.StartsWith("private") //method signature
|| trimmed.StartsWith("protected") //method signature
);
}
答案 3 :(得分:1)
我对它们一无所知,但您可以使用Code Metrics Values获取有关您的解决方案的一些统计信息,例如代码行。
答案 4 :(得分:1)
我们使用tfs多维数据集来获取有关在tfs上添加/删除/更改行数的数据。这个你可以从excel查看。但需要正确配置它。而且我认为它不会排除评论和空白行等。
答案 5 :(得分:0)
Ctrl + Shift + f(在文件中查找) - > put";"在"找到什么:" -textbox - >按"查找全部" - 按钮。
这个极其简单的方法利用了这样一个事实,即任何C#语句都以分号结束。而且,至少我不会在任何其他地方使用分号(例如在评论中)......