gpt4 book ai didi

tfs - 寻找在引入新警告时破坏构建的构建事件

转载 作者:行者123 更新时间:2023-12-04 02:23:39 26 4
gpt4 key购买 nike

我们正在尝试清理一大堆棕色字段代码,同时一个团队正在添加新功能。我们希望确保从任何编译器/代码分析或其他警告中清除更改并清除新代码,但是它们太多了,无法从清除当前解决方案开始。

我们正在使用 TFS 2010。

因此提出以下建议:

  • 编写/选择一个构建事件,该事件将构建中的警告列表与随该 checkin 更改的代码行进行比较。
  • 如果警告提供了行号,并且该行号已更改,则构建失败。

  • 我知道这不会找到所有新警告,并且不会标记代码其他部分中引入的内容,但这至少是一些东西。

    提出的另一种选择:
  • 将先前已知良好构建的警告列表与此构建的列表进行比较。如果有新的警告(在文件名级别跟踪),则构建失败。

  • 任何可能提供上述功能的已知操作?

    任何可以对代码覆盖率报告采取行动的类似操作?

    最佳答案

    以下事件只是一种基本方法,返回 false如果当前构建的警告少于或等于上次构建的警告和 true如果它们已经上升。另一个可以定位新警告和/或在代码中显示它们的位置的事件显然会更好,但我认为这可能是一个有趣的起点:

    using System;
    using System.Activities;
    using Microsoft.TeamFoundation.Build.Client;
    using Microsoft.TeamFoundation.Build.Workflow.Activities;

    namespace CheckWarnings
    {
    [BuildActivity(HostEnvironmentOption.Agent)]
    public sealed class CheckWarnings : CodeActivity<bool>
    {
    [RequiredArgument]
    public InArgument<IBuildDetail> CurrentBuild { get; set; } //buildDetail
    public InArgument<string> Configuration { get; set; } //platformConfiguration.Configuration
    public InArgument<string> Platform { get; set; } //platformConfiguration.Platform


    protected override bool Execute(CodeActivityContext context)
    {
    IBuildDetail currentBuildDetail = context.GetValue(CurrentBuild);
    string currentConfiguration = context.GetValue(Configuration);
    string currentPlatform = context.GetValue(Platform);

    Uri lastKnownGoodBuildUri = currentBuildDetail.BuildDefinition.LastGoodBuildUri;
    IBuildDetail lastKnownGoodBuild = currentBuildDetail.BuildServer.GetBuild(lastKnownGoodBuildUri);

    int numOfCurrentWarnings = GetNumberOfWarnings(currentBuildDetail, currentConfiguration, currentPlatform);
    context.TrackBuildMessage("Current compile presents " + numOfCurrentWarnings + " warnings.", BuildMessageImportance.Normal);

    int numOfLastGoodBuildWarnings = GetNumberOfWarnings(lastKnownGoodBuild, currentConfiguration,
    currentPlatform);
    context.TrackBuildMessage("Equivalent last good build compile presents " + numOfLastGoodBuildWarnings + " warnings.", BuildMessageImportance.Normal);

    if (numOfLastGoodBuildWarnings < numOfCurrentWarnings)
    {
    return true;
    }
    return false;
    }

    private static int GetNumberOfWarnings(IBuildDetail buildDetail, string configuration, string platform)
    {
    var buildInformationNodes =
    buildDetail.Information.GetNodesByType("ConfigurationSummary");

    foreach (var buildInformationNode in buildInformationNodes)
    {
    string localPlatform, numOfWarnings;
    string localConfiguration = localPlatform = numOfWarnings = "";
    foreach (var field in buildInformationNode.Fields)
    {

    if (field.Key == "Flavor")
    {
    localConfiguration = field.Value;
    }
    if (field.Key == "Platform")
    {
    localPlatform = field.Value;
    }
    if (field.Key == "TotalCompilationWarnings")
    {
    numOfWarnings = field.Value;
    }
    }
    if(localConfiguration == configuration && localPlatform == platform)
    {
    return Convert.ToInt32((numOfWarnings));
    }
    }
    return 0;
    }
    }
    }

    请注意,此事件不提供异常处理,应进一步细化,以防您的构建定义构建多个解决方案。它需要三个输入参数( buildDetailplatformConfiguration.ConfigurationplatformConfiguration.Platform )并且应该放置直接在 Run MSBuild 之后事件。

    关于tfs - 寻找在引入新警告时破坏构建的构建事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607356/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com