2013-02-12 2 views
2

Я использую NDepend 4.1 API для подсчета строк кода в Visual Studio 2010 решение, которое имеет несколько проектов, которые все таргетингом на .NET Framework 4. Вот мой код:Почему 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, хотя Я не изменил решение или его скомпилированные сборки каким-либо образом. Например, если я запустить анализ три раза, я мог бы получить totalLoc значение 12100, 12220 и 12075.

рыть немного глубже, я начал перебор analysisResult.CodeBase.Application.Methods и написание имени каждого метода и NbLinesOfCode к текстовый файл. Когда я разбираю файлы из любых двух аналитических прогонов, я замечаю, что большинство методов показывают согласованное количество LOC, но есть несколько, которые этого не делают. Я не вижу ни одного шаблона в этом, и каждый раз он не является одним и тем же набором методов.

Что может быть причиной этого странного поведения?

Update 1: Если я бегу анализ на любой одной сборки, я получаю последовательный подсчет LOC. Проблема возникает только при передаче нескольких сборок в CreateTemporaryProject.

+0

Отладка vs выпускает сборки? –

+0

@AustinSalonen: Когда я называю 'CreateTemporaryProject', я стараюсь всегда передавать точно такой же список сборок, которые сейчас являются сборками Debug. –

+0

Сборы не перекомпилируются между двумя анализами? –

ответ

1

Это была ошибка, исправленная в NDepend version 5!

Интересно, что ошибка возникла из-за проблемы с одновременным доступом, которая проявлялась при различных результатах анализа при анализе двух больших сборок на двух разных потоках!

Смежные вопросы