用于捕获块记录的自定义检查模式

Fin*_*nch 9 c# resharper

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

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

}
Run Code Online (Sandbox Code Playgroud)

但应该是非法的:

try{
    // Any amount of code
}
catch(Exception e){
    Logger.LogException(e.Message, e);
}
Run Code Online (Sandbox Code Playgroud)

完全可以接受.为此,我设置了以下模式来检测和重新考虑因素.

搜索模式:

try{
    $anystatements$
}
catch($exceptiontype$ $exceptionarg$){
    $anycatchstatements$
}
Run Code Online (Sandbox Code Playgroud)

替换模式:

try{
    $anystatements$
}
catch($exceptiontype$ $exceptionarg$){
    Logger.LogException($exceptionarg$.Message, $exceptionarg$)
    $anycatchstatements$
}
Run Code Online (Sandbox Code Playgroud)

Resharper正在检测气味很好,但是将替换模式本身视为一种气味,因为Logging的附加行由$anycatchstatement$占位符匹配.

如何定义一个占位符来描述"匹配catch块中任何数量的语句,这些语句不是对自定义记录器的调用,只需将调用附加到记录器"?

Vla*_*sla 1

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

事实证明,您应该看看 Code Contracts,或者http://www.postsharp.net/或类似的东西。

弗拉基米尔·列谢特尼科夫 (Vladimir Reshetnikov) 也是对的 - 他们的团队可以为您提供很多帮助。您可以通过电子邮件或网络表单轻松与他们联系。他们拥有非常优秀的开发人员,并且公司允许与客户直接沟通。他们来自俄罗斯:)