【问题标题】:Gray out logging code using ReSharper使用 ReSharper 灰显日志记录代码
【发布时间】:2013-06-08 13:47:37
【问题描述】:

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

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

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

【问题讨论】:

标签: c# .net logging resharper


【解决方案1】:

您可以在某种程度上实现这一点,但这有点像 hack。你可以做的是用ConditionalAttribute 装饰你的日志记录方法,使用ReSharper 的External Annotations

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

你可以做的是欺骗,让ReSharper认为这样一个条件方法存在于你的记录器的方法中。您可以通过 XML 在外部应用此属性。

我在 my blog 中写过关于做这样的事情,这里是你可以这样做的方法:

  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>

对于您希望“变灰”的每个方法,您需要添加一个带有该方法的 XML-Doc ID 名称的&lt;member&gt; 块。在 ReSharper 8 EAP 中有一个选项将 XML-Doc ID 复制到剪贴板,位于 ReSharper 的 Edit 菜单下。

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

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

【讨论】:

  • 我强烈不建议这样做,因为[Conditional] 属性删除的调用会影响 C# 编译器控制流图和明确的赋值分析,以及 R# 的代码分析。 ReSharper 将忽略有关作为[Conditional] 调用的一部分评估的表达式的任何有用信息,这对于仅使代码变灰来说“太多了”。最好写个插件:)
  • @ControlFlow 我应该添加“不要在家里尝试这个”免责声明:)
【解决方案2】:

只是不要这样做。

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

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

【讨论】:

  • 你不能将所有平凡的代码(例如日志记录或检查)移动到单独的方法中,它通常与逻辑交错。
猜你喜欢
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多