我正在使用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
时,才会出现此问题。
答案 0 :(得分:1)
这是NDepend version 5中已修复的错误!
有趣的是,这个bug来自一个subtil并发访问问题,当在两个不同的线程上分析了两个大型程序集时,这些问题表现出不同的分析结果!