我刚刚下载了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块中任何数量的语句,这些语句不是对自定义记录器的调用,只需将调用附加到记录器"?
不幸的是,我正在使用 Resharper 8 EAP ( http://confluence.jetbrains.com/display/ReSharper/ReSharper+8+EAP ),但它仍然没有这样的选项。
事实证明,您应该看看 Code Contracts,或者http://www.postsharp.net/或类似的东西。
弗拉基米尔·列谢特尼科夫 (Vladimir Reshetnikov) 也是对的 - 他们的团队可以为您提供很多帮助。您可以通过电子邮件或网络表单轻松与他们联系。他们拥有非常优秀的开发人员,并且公司允许与客户直接沟通。他们来自俄罗斯:)