2

当我们的应用程序(在工作中)抛出异常时,我正在尝试找出一些方法来找出“责备”谁。当然,这可能是我造成的,但我可以接受:)。但要做到这一点,我需要 TFS 中文件的历史记录,这样我就可以检查谁最后在异常行进行了更改。当然,它并不总是在插入错误更改的异常行中,因此我可能还需要检查对同一文件的任何更改,最后是最近进行的任何签入。我不确定我将如何解决这个问题,但我想先咨询社区是否有任何现有的解决方案?我还没有使用 TFS API 的经验,所以我无法判断什么是可能的,什么是不可能的。我想我会在未处理的异常处理程序中将它集成到我们的应用程序中。当发现一些例外的候选人时,我需要通过电子邮件通知他们。在此过程中,最好记录我们的 Intranet 上的任何用户抛出某个异常的次数、谁、何时、如何等。它可以为我们节省大量时间(和金钱)。

4

2 回答 2

5

我喜欢这种精神!TFS API 非常强大,您可以深入了解您感兴趣的信息。

  • 您可以创建一个应用程序,让我们调用您的应用程序 TFS API 应用程序,查看如何以编程方式连接到 TFS http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to -tfs-2010-programmaticallyndashpart-1.aspx

  • TFS API 允许您查询 TFS 以获取对文件所做的所有更改(变更集)。因此,假设 ClassAbc.cs 引发了一个异常,如果您有一个向 TFS API 应用程序引发此异常的事件总线,您可以使用 versionControlService GetChangeset 方法中的方法来获取对该文件执行的所有变更集。在这里查看如何做到这一点http://geekswithblogs.net/TarunArora/archive/2011/06/26/tfs-2010-sdk-smart-merge-programmatically-create-your-own-merge.aspx

  • 此时,您可以在 2 个变更集之间进行增量,并使用类似的方式获取代码更改。

    public static void GetMergeDetailsForChangeSet()
    {
        var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("Enter the url of team project"));
        var versionControl = tfs.GetService<VersionControlServer>();
    
    
        var a = versionControl.GetChangeset(12322);
    
        VersionSpec changeSpec = new ChangesetVersionSpec(a.Changes[0].Item.ChangesetId);
    
        var abc = a.Changes[0].Item.VersionControlServer.QueryMergesWithDetails(
            null,
            null,
            0,
            a.Changes[0].Item.ServerItem,
            changeSpec,
            a.Changes[0].Item.DeletionId,
            changeSpec,
            changeSpec,
            RecursionType.Full);
    
    }
    
  • 现在您将拥有实际代码,您可以针对该代码块运行一组 StyleCop http://www.codeproject.com/KB/cs/StyleCop.aspx规则,并发现可能的异常或一般代码分析结果可能是记录在数据库中并通过电子邮件发送给用户。

听起来不错。但是,或者,您可以使用 TFS 中的 Annote 功能来查看开发人员对文件所做的一系列更改,并将代码分析与您的 CI 构建定义相关联,并获得团队中开发人员所做代码更改的持续反馈。

于 2011-06-30T22:33:21.957 回答
1

这真的有意义吗?考虑在多少情况下异常是由引发点的更改引起的。通常异常的原因是在抛出时的某个地方或什至不在调用堆栈中。在 99% 的情况下,你不应该把时间花在对你没有帮助的事情上。

于 2011-06-30T08:48:56.923 回答