2012-04-20 5 views
2

누구나 TFS API를 사용하여 프로그래밍 방식으로 TFS에서 빌드의 일부로 계측 된 바이너리를 결정할 수 있습니까? 예를 들어프로그래밍 방식으로 데이터웨어 하우스를 통해 TFS "계측 바이너리"에 대한 경로 정보 검색

은, 코드 커버리지와 TFS에 빌드를 실행 후 출력이 표시됩니다 :

... 
-> 2 binaries instrumented - 62% of all code blocks covered 
     SomeAssembly.dll - 392 blocks covered, 368 blocks not covered 
     SomeExe.exe - 584 blocks covered, 241 blocks not covered 
... 

내가 프로그래밍 방식 "SomeAssembly.dll"와 "SomeExe.exe"는을 것을 결정하고 싶습니다 그 빌드의 일부로서 계측 된 바이너리. 내가 가고 싶은 곳 내가 TFS API를 통해 팀 프로젝트를 검색으로까지 얻었다 그러나 저를 얻을 것을 확실하지 않은

:

팀을 가져 오기 : 여기

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(new Uri(versionControlURIRoot + defaultProjectDirectory)) 
var testManagementService = collection.GetService<ITestManagementService>(); 
ITestManagementTeamProject teamProject = testManagementService.GetTeamProject(projectName); 

답변

2

는 솔루션입니다 프로젝트 : 빌드 범위의 메타 데이터에서

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(new Uri(versionControlURIRoot + defaultProjectDirectory)); 
    var testManagementService = collection.GetService<ITestManagementService>(); 
    ITestManagementTeamProject teamProject = testManagementService.GetTeamProject(projectName); 

추출 어셈블리 이름 :

List<string> assemblyNames = new List<string>(); 
if (teamProject != null) { 
    ICoverageAnalysisManager coverageAnalysisManager = teamProject.CoverageAnalysisManager; 
    if (coverageAnalysisManager != null) { 
     IBuildCoverage[] buildCoverage = coverageAnalysisManager.QueryBuildCoverage(buildURI, CoverageQueryFlags.Modules); 
     List<string> assemblyNames = new List<string>(); 
     foreach (IBuildCoverage buildCoverageDetails in buildCoverage) { 
      foreach (IModuleCoverage module in buildCoverageDetails.Modules) { 
        assemblyNames.Add(module.Name); 
      } 
     } 
    } 
}