2013-02-12 5 views
2

나는 비주얼 스튜디오에서 여기 내 코드의 모든 .NET 프레임 워크 4를 대상으로하는 몇 가지 프로젝트가 2010 솔루션 코드의 라인을 계산하는 NDepend 4.1 API를 사용하고 있습니다 : 경우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); 

를 I 솔루션에서이 분석을 반복적으로 실행하면 에 대해 다른 결과가 발생합니다. 솔루션이나 컴파일 된 어셈블리를 변경하지 않았더라도 마찬가지입니다. 내가 분석을 세 번 실행하면 예를 들어, 내가 좀 더 깊이 파고 totalLoc 12100의 값, 12220, 및 12075.

를 얻을 수 있습니다, 나는 analysisResult.CodeBase.Application.Methods을 반복하고 각 방법의 이름과 NbLinesOfCode을 쓰기 시작했습니다 텍스트 파일. 두 번의 분석 실행에서 파일을 비교할 때 대부분의 방법이 일관된 LOC 수를 보여 주지만 일부는 그렇지 않은 것으로 나타났습니다. 이 패턴을 볼 수 없으며 매번 동일한 메소드 세트가 아닌 것 같습니다.

이 이상한 동작을 일으킬 수있는 원인은 무엇입니까?

업데이트 1 : 나는 어떤 단일 어셈블리의 분석을 실행 경우에, 나는 일관된 LOC 카운트를 얻는다. 여러 어셈블리를 CreateTemporaryProject에 전달할 때만 문제가 발생합니다.

+0

디버그 대 릴리스 빌드? –

+0

@AustinSalonen :'CreateTemporaryProject'를 호출 할 때, 지금 당장 디버그 어셈블리 인 어셈블리의 정확히 같은 목록을 전달하는 것에주의해야합니다. –

+0

두 분석 사이에 어셈블리가 다시 컴파일되지 않습니까? –

답변

1

이것은 버그가 수정 된 NDepend version 5입니다!

놀랍게도이 버그는 2 개의 대규모 어셈블리를 2 개의 다른 스레드에서 분석했을 때 서로 다른 분석 결과를 나타내는 하위 동시 액세스 문제에서 비롯되었습니다.