为什么NDepend不会产生稳定的LOC计数?

时间:2013-02-12 20:29:07

标签: c# static-analysis ndepend lines-of-code

我正在使用NDepend 4.1 API来计算Visual Studio 2010解决方案中的代码行,该解决方案包含一些项目,这些项目都是针对.NET Framework 4.这是我的代码:

var servicesProvider = new NDependServicesProvider();
var projectManager = servicesProvider.ProjectManager;
var project = projectManager.CreateTemporaryProject( ... );
var analysisResult = project.RunAnalysis();

var methods = analysisResult.CodeBase.Application.Methods;
var totalLoc = methods.Where( i => i.NbLinesOfCode.HasValue ).Sum( i => i.NbLinesOfCode.Value );

如果我在我的解决方案上反复运行此分析,我会得到totalLoc的不同结果,即使我没有以任何方式更改解决方案或其编译的程序集。例如,如果我运行分析三次,我可能会得到totalLoc值12100,12220和12075.

深入挖掘,我开始迭代analysisResult.CodeBase.Application.Methods并将每个方法的名称和NbLinesOfCode写入文本文件。当我从任何两个分析运行中区分文件时,我注意到大多数方法显示一致的LOC计数,但有少数方法没有。我在这里看不到任何模式,每次看起来都不是同一套方法。

可能导致这种奇怪行为的原因是什么?

更新1:如果我在任何单个程序集上运行分析,我会获得一致的LOC计数。只有当我将多个程序集传递给CreateTemporaryProject时,才会出现此问题。

1 个答案:

答案 0 :(得分:1)

这是NDepend version 5中已修复的错误!

有趣的是,这个bug来自一个subtil并发访问问题,当在两个不同的线程上分析了两个大型程序集时,这些问题表现出不同的分析结果!