2

我正在使用 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即使我没有以任何方式更改解决方案或其编译的程序集,我也会得到不同的结果。例如,如果我运行 3 次分析,我可能会得到totalLoc12100、12220 和 12075 的值。

再深入一点,我已经开始遍历analysisResult.CodeBase.Application.Methods并将每个方法的名称写入NbLinesOfCode文本文件。当我从任何两次分析运行中对文件进行比较时,我注意到大多数方法都显示出一致的 LOC 计数,但也有少数方法没有。我在其中看不到任何模式,而且每次似乎都不是同一组方法。

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

更新 1:如果我对任何单个程序集运行分析,我会得到一致的 LOC 计数。只有当我将多个程序集传递给CreateTemporaryProject.

4

1 回答 1

1

这是现在在NDepend 版本 5中修复的错误!

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

于 2013-09-20T08:18:47.430 回答