使用ReSharper将日志记录代码变灰

Jas*_*len 12 .net c# resharper logging

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

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

我正在寻找类似于Debug.WriteLine在发布模式下显示的内容,虽然我不想编译出来.

Iga*_*nik 9

你可以实现这一点,但这是一种黑客攻击.您可以做的是使用ReSharper的外部注释使用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>
Run Code Online (Sandbox Code Playgroud)

对于希望"灰显"的每种方法,您需要添加一个<member>包含方法的XML-Doc ID名称的块.在ReSharper 8 EAP中,有一个选项将XML-Doc ID复制到剪贴板,位于ReSharper的编辑菜单下.

这实质上导致ReSharper的引擎认为[Conditional("LOG")]记录器的类型元数据中已定义.

添加完所有需要的方法后,只需重新加载解决方案即可.你应该得到你想要的东西(有点......就像我说的,这是一个黑客:))

ReSharper hackery


lig*_*cko -3

只是不要这样做。

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

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