【发布时间】:2013-02-12 20:29:06
【问题描述】:
我正在使用 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 次,我可能会得到 totalLoc 的值 12100、12220 和 12075。
再深入一点,我开始遍历analysisResult.CodeBase.Application.Methods 并将每个方法的名称和NbLinesOfCode 写入一个文本文件。当我从任何两次分析运行中对文件进行比较时,我注意到大多数方法都显示出一致的 LOC 计数,但也有少数方法没有。我在其中看不到任何模式,而且每次似乎都不是同一组方法。
什么可能导致这种奇怪的行为?
更新 1:如果我对任何单个程序集运行分析,我会得到一致的 LOC 计数。只有当我将多个程序集传递给CreateTemporaryProject 时才会出现问题。
【问题讨论】:
-
调试与发布版本?
-
@AustinSalonen:当我调用
CreateTemporaryProject时,我会小心地始终传入完全相同的程序集列表,而现在恰好是调试程序集。 -
程序集没有在两次分析之间重新编译?
-
@PatrickfromNDependteam:没错。它们没有被重新编译。我用一个类库程序集和两个 Web 程序集调用
CreateTemporaryProject。我验证了这些程序集的最后修改日期在分析运行之间没有变化。 -
@William 这是一个非常出乎意料的行为,您能否在 NOSPAM ndepend dot com 的支持处向我们发送相关程序集?
标签: c# static-analysis ndepend lines-of-code