当我们的应用程序(工作中)抛出异常时,我正试图找出某些方法来“责备”。它可能是我当然造成它但我可以接受:)。但要做到这一点,我需要TFS中的文件的历史记录,以便我可以检查谁最后在异常行进行了更改。它当然并不总是插入错误更改的异常行,所以我可能还需要检查对同一文件的任何更改,最后是最近进行的任何签入。我不确定如何解决这个问题,但我想先咨询社区,看看是否有现成的解决方案?我没有使用TFS API的经验,所以我无法告诉什么是可能的,什么不是。我想我会在未处理的例外处理程序中将它集成到我们的应用程序中。当找到异常的一些候选人时,我需要通过电子邮件通知他们。在这个过程中,最好记录内网上任何用户抛出某个异常的次数,谁,何时,如何等等。它可以为我们节省大量的时间(和金钱)。
答案 0 :(得分: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构建定义相关联,并获得团队中开发人员完成的代码更改的持续反馈。 / p>
答案 1 :(得分:1)
这真的有意义吗?考虑在多少场景中,异常是由抛出点的变化引起的。通常,异常的原因是在某个地方或者甚至在抛出时的callstack中。在99%的情景中,你不应该把时间花在无法帮助你的事情上。