【问题标题】:Why doesn't NDepend produce a stable LOC count?为什么 NDepend 不产生稳定的 LOC 计数?
【发布时间】: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


【解决方案1】:

这是 NDepend version 5 中现已修复的错误!

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

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2012-01-08
    • 2013-10-20
    相关资源
    最近更新 更多