C# 为什么';是否独立产生稳定的LOC计数?

C# 为什么';是否独立产生稳定的LOC计数?,c#,static-analysis,ndepend,lines-of-code,C#,Static Analysis,Ndepend,Lines Of Code,我正在使用NDepend 4.1 API计算VisualStudio2010解决方案中的代码行数,该解决方案有几个项目,这些项目都以.NETFramework4为目标。这是我的密码: var servicesProvider = new NDependServicesProvider(); var projectManager = servicesProvider.ProjectManager; var project = projectManager.CreateTemporaryProjec

我正在使用NDepend 4.1 API计算VisualStudio2010解决方案中的代码行数,该解决方案有几个项目,这些项目都以.NETFramework4为目标。这是我的密码:

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 );
如果我对我的解决方案重复运行此分析,即使我没有以任何方式更改解决方案或其编译的程序集,我对
totaloc
也会得到不同的结果。例如,如果我运行分析三次,我可能会得到12100、12220和12075的
totaloc

再深入一点,我开始遍历
analysisResult.CodeBase.Application.Methods
,并将每个方法的名称和
NbLinesOfCode
写入文本文件。当我区分任意两次分析运行的文件时,我注意到大多数方法都显示了一致的LOC计数,但也有少数方法没有。我看不出这里面有任何模式,而且每次似乎都不是同一套方法

是什么导致了这种奇怪的行为


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

时,问题才会发生。这是一个现已修复的错误


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

调试版本与发布版本?@AustinSalonen:当我调用
CreateTemporaryProject
时,我会小心地始终传入完全相同的程序集列表,这些程序集恰好是调试程序集。在两次分析之间不会重新编译这些程序集?@PatrickFromIndependeTeam:正确。它们没有被重新编译。我正在使用一个类库程序集和两个web程序集调用
CreateTemporaryProject
。我已验证这些程序集的上次修改日期在分析运行之间没有更改。@William这是一个非常意外的行为,请将相关的程序集发送到NOSPAM ndepend.com的技术支持部门,好吗?