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

时间:2013-06-08 13:47:38

标签: c# .net logging resharper

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

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

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

2 个答案:

答案 0 :(得分:9)

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

注释在ReSharper中几乎无处不在,例如,因为Debug.WriteLine行用Debug.Write...属性修饰,所以它知道如何在Release中使[Conditional("DEBUG")]行变灰。 / p>

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

我在my blog写了关于这样做的事情,这里有你怎么做:

  1. 创建名为 YourLogger.ExternalAnnotations.xml 的文件,例如NLog.ExternalAnnotations.xml并将其放在记录器组件旁边。
  2. 添加以下内容:
  3. <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中,有一个选项将XML-Doc ID复制到剪贴板,位于ReSharper的编辑菜单下。

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

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

    ReSharper hackery

答案 1 :(得分:-3)

就是不要这样做。

处理非结构化代码是一种糟糕的方式,它只会对您有所帮助。如果按照建议的方式(如果可能的话)执行此操作,其他开发人员必须安装ReSharper并按照您的要求配置它,如果他们希望业务逻辑能够脱颖而出。

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