如何在办理登机手续时自动更换部分代码

时间:2016-07-08 14:15:33

标签: tfs azure-devops

我想给TFS写一个钩子或签到政策,例如找到所有出现的:

catch(Exception e)
{
   MySuperLoger.LogException("some msg", params, e);
   throw;
}
在正在签入的代码中

,并将其替换为:

catch(Exception e)
{
   MySuperLoger.LogExceptionWithoutStackTrace("some msg", params, e);
   throw;
}

无视这一点,我真的需要编辑代码,这些代码是正在检入的待处理更改的一部分。 我试着用谷歌搜索,然后阅读Team Services service hooks events docs,但它对我帮助不大。

2 个答案:

答案 0 :(得分:4)

我同意丹尼尔。您不应该在办理登机手续/退房时更改文件,这将导致太多问题。这也是为什么签到政策不能以优雅的方式处理这些问题的原因。 Buck Hodges from the Visual Studio/TFS team once wrote a detailed blog post on why this is a bad idea.

ReSharper的

投资一些验证码会更好。如果你有Resharper,最简单的方法就是create a Search template,然后将其保存为检查。使用Resharper,您甚至可以进行解决方案范围的搜索和替换,以便快速修复代码中的所有事件。 enter image description here

选择替换将搜索整个解决方案的任何事件,并允许您一次解决此问题。请注意,这只会触发Catch块中的出现次数。 enter image description here

您可以保存此模式,然后从模式目录中将其转换为检查所需的错误级别: enter image description here

使用Resharper CLI,您可以将这些检查添加到基于命令行的构建,这使您可以非常轻松地将其与Visual Studio Team Services构建集成。

罗斯林

如果您不拥有Resharper,它将会有更多工作,实现Roslyn Analyzer是在IDE和Build过程中处理这些问题的好方法,无论是在客户端还是与持续集成构建一样,但需要一点学习曲线。

解决核心问题

另一种方法是简单地重命名SuperLogger中的旧方法或将其标记为[Obsolete("Use LogExceptionWithoutStackTrace instead.")]。你也可以告诉它抛出错误,或者只是简单地将LogException方法重定向到不包含堆栈跟踪的方法,然后重载"重载"它

// Will result in a compiler warning when this method is used
[Obsolete("Use MysuperLogger.LogExceptionWithoutStacktrace instead.")]
public static void LogException(string msg, Exception e)

// Add , true to have the compiler throw an error when this method is used
[Obsolete("Use MysuperLogger.LogExceptionWithoutStacktrace instead.", true)]
public static void LogException(string msg, Exception e)

或者将其标记为过时并同时重定向:

[Obsolete("Use MysuperLogger.LogExceptionWithoutStacktrace instead.")]
public static void LogException(string msg, Exception e)
{
    LogExceptionWithoutStacktrace(msg, e);
}

如果您巧妙地格式化错误消息,使用已过时的标记Resharper将自动提供替换:

enter image description here

答案 1 :(得分:3)

这种情况下编写自定义代码分析规则(Roslyn分析器,FxCop,SonarQube等)并通过门控签入或拉取请求强制执行它是正确的操作过程。您的提交/构建过程永远不应该更改代码。