是否可以使用 ReSharper 使使用 ReSharper 的有用但臃肿的代码变灰?例如,当我想添加详细日志记录时,最好让功能代码在日志记录代码周围脱颖而出。
我尝试使用 ReSharper 的模式目录搜索来匹配我的代码中的模式并以灰色突出显示它们,但它只支持提示、建议、警告和错误。
我正在寻找类似于Debug.WriteLine
在发布模式下显示的内容,尽管我不想将代码编译出来。
你可以实现这一点,但它是一种黑客。您可以做的是使用 ReSharper 的External Annotations用ConditionalAttribute装饰您的日志记录方法。
ReSharper 中几乎到处都使用注释,例如,它知道Debug.WriteLine
在 Release 中将线条变灰,因为Debug.Write...
线条用[Conditional("DEBUG")]
属性装饰。
您可以做的是通过让 ReSharper认为您的记录器方法中存在这种条件方法来作弊。您可以通过 XML 在外部应用此属性来实现。
我在我的博客中写过关于做这样的事情,你可以这样做:
<assembly name="NLog"> <member name="M:NLog.Logger.Info(System.String)"> <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> <argument>LOG</argument> </attribute> </member> <member name="M:NLog.Logger.Debug(System.String)"> <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> <argument>LOG</argument> </attribute> </member> </assembly>
对于您希望“变灰”的每个方法,您需要添加一个<member>
带有该方法的 XML-Doc ID 名称的块。在 ReSharper 8 EAP 中有一个选项Copy XML-Doc ID to Clipboard,位于 ReSharper 的Edit菜单下。
这实质上会导致 ReSharper 的引擎认为[Conditional("LOG")]
在记录器的类型元数据中定义了一个。
添加所有所需方法后,只需重新加载解决方案。你应该得到你正在寻找的东西(有点......就像我说的,这是一个黑客:))
只是不要这样做。
这是处理非结构化代码的一种不好的方法,它只会有一点帮助,而且只对你有用。如果您按照您建议的方式进行操作(如果可能),其他开发人员必须安装 ReSharper 并像您一样配置它,如果他们希望业务逻辑脱颖而出。
这不是你问的,但我认为更好的方法是将详细日志记录移动到单独的方法/类中。那么与日志相关的代码将只是您当前方法中的一个方法调用。