9

我刚刚下载了 Resharper 7.1 的试用版。我的目标是强制执行一个规则,即我们的自定义记录器必须在我们的 c# 代码库中的所有 catch 块上使用。例子;

try{
    // Any amount of code
}
catch(Exception e){

}

应该是非法的,但是:

try{
    // Any amount of code
}
catch(Exception e){
    Logger.LogException(e.Message, e);
}

完全可以接受。为此,我设置了以下模式来检测和重构。

搜索模式:

try{
    $anystatements$
}
catch($exceptiontype$ $exceptionarg$){
    $anycatchstatements$
}

替换模式:

try{
    $anystatements$
}
catch($exceptiontype$ $exceptionarg$){
    Logger.LogException($exceptionarg$.Message, $exceptionarg$)
    $anycatchstatements$
}

Resharper 可以很好地检测到气味,但是将替换模式本身视为气味,因为 Logging 的添加行与$anycatchstatement$占位符匹配。

如何定义一个占位符来描述“匹配 catch 块中的任意数量的语句,这些语句不是对自定义记录器的调用,而是简单地附加一个对记录器的调用”?

4

1 回答 1

1

不幸的是,不,我正在使用 Resharper 8 EAP ( http://confluence.jetbrains.com/display/ReSharper/ReSharper+8+EAP ),但它仍然没有这样的选项。

可以证明,您应该查看 Code Contracts,或http://www.postsharp.net/或类似的东西。

Vladimir Reshetnikov 也是对的 - 他们的团队可以为您提供很多帮助。您可以通过电子邮件或网络表单轻松与他们联系。他们有非常好的开发人员,公司允许与他们的客户直接沟通。他们来自俄罗斯:)

于 2013-05-26T11:33:38.887 回答