12

是否可以使用 ReSharper 使使用 ReSharper 的有用但臃肿的代码变灰?例如,当我想添加详细日志记录时,最好让功能代码在日志记录代码周围脱颖而出。

我尝试使用 ReSharper 的模式目录搜索来匹配我的代码中的模式并以灰色突出显示它们,但它只支持提示、建议、警告和错误。

我正在寻找类似于Debug.WriteLine在发布模式下显示的内容,尽管我不想将代码编译出来。

4

2 回答 2

9

你可以实现这一点,但它是一种黑客。您可以做的是使用 ReSharper 的External Annotations用ConditionalAttribute装饰您的日志记录方法。

ReSharper 中几乎到处都使用注释,例如,它知道Debug.WriteLine在 Release 中将线条变灰,因为Debug.Write...线条用[Conditional("DEBUG")]属性装饰。

您可以做的是通过让 ReSharper认为您的记录器方法中存在这种条件方法来作弊。您可以通过 XML 在外部应用此属性来实现。

我在我的博客中写过关于做这样的事情,你可以这样做:

  1. 创建一个名为YourLogger.ExternalAnnotations.xml的文件,例如 NLog.ExternalAnnotations.xml 并将它放在您的记录器程序集旁边。
  2. 添加以下内容:
<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 黑客

于 2013-06-08T23:30:56.837 回答
-3

只是不要这样做。

这是处理非结构化代码的一种不好的方法,它只会有一点帮助,而且只对你有用。如果您按照您建议的方式进行操作(如果可能),其他开发人员必须安装 ReSharper 并像您一样配置它,如果他们希望业务逻辑脱颖而出。

这不是你问的,但我认为更好的方法是将详细日志记录移动到单独的方法/类中。那么与日志相关的代码将只是您当前方法中的一个方法调用。

于 2013-06-08T14:02:15.090 回答