2013-02-12 94 views
2

我使用NDepend的4.1 API至2010年的解决方案,有几个项目,这些项目都是针对.NET Framework 4的下面是我的代码数的代码行,在Visual Studio中:为什么NDepend不会产生稳定的LOC计数?

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即使我没有以任何方式更改解决方案或其编译的程序集。例如,如果我运行分析三次,我可能得到的12100 totalLoc值,12220和12075.

挖得更深一些,我已经开始通过analysisResult.CodeBase.Application.Methods迭代,写各种方法的名称和NbLinesOfCode到文本文件。当我对任何两次分析运行中的文件进行比较时,我注意到大多数方法显示一致的LOC计数,但有一些方法没有。我看不到任何模式,每次看起来都不是同一组方法。

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

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

+0

Debug vs Release builds? – 2013-02-12 20:30:28

+0

@AustinSalonen:当我调用'CreateTemporaryProject'时,我总是仔细地传入完全相同的程序集列表,这些程序集现在恰好是调试程序集。 – 2013-02-12 20:33:09

+0

程序集不会在两次分析之间重新编译? – 2013-02-12 20:55:34

回答

1

这是一个现在已修复的错误NDepend version 5

有趣的是,这个错误来自于一个并发访问问题,当两个不同的线程分析了两个大的程序集时,这个问题表现出不同的分析结果!

相关问题