2

プログラムで (TFS API を使用して) 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);
4

1 に答える 1

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);
            }
        }
    }
}
于 2012-05-31T14:00:03.670 に答える