我正在使用NDepend 4.1 API在具有几个项目的Visual Studio 2010解决方案中计算代码行,这些项目都针对.NET Framework4。这是我的代码:

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时,才会发生此问题。

最佳答案

这是一个错误,现在已在NDepend version 5中修复!

有趣的是,该错误来自一个微不足道的并发访问问题,当在两个不同的线程上分析2个大型程序集时,该错误表现出不同的分析结果!

关于c# - 为什么NDepend无法产生稳定的LOC计数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14841218/

10-10 13:47