我想给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,但它对我帮助不大。
答案 0 :(得分:4)
我同意丹尼尔。您不应该在办理登机手续/退房时更改文件,这将导致太多问题。这也是为什么签到政策不能以优雅的方式处理这些问题的原因。 Buck Hodges from the Visual Studio/TFS team once wrote a detailed blog post on why this is a bad idea.
投资一些验证码会更好。如果你有Resharper,最简单的方法就是create a Search template,然后将其保存为检查。使用Resharper,您甚至可以进行解决方案范围的搜索和替换,以便快速修复代码中的所有事件。
选择替换将搜索整个解决方案的任何事件,并允许您一次解决此问题。请注意,这只会触发Catch块中的出现次数。
您可以保存此模式,然后从模式目录中将其转换为检查所需的错误级别:
使用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将自动提供替换:
答案 1 :(得分:3)
这种情况下编写自定义代码分析规则(Roslyn分析器,FxCop,SonarQube等)并通过门控签入或拉取请求强制执行它是正确的操作过程。您的提交/构建过程永远不应该更改代码。