【问题标题】:How do I tell ReSharper that an attribute means that a method is used?我如何告诉 ReSharper 一个属性意味着使用了一个方法?
【发布时间】:2010-05-20 16:33:38
【问题描述】:

我在玩SpecFlow,ReSharper 认为我的步骤定义未使用(我猜是因为它们是通过反射使用的):

[Binding]
public class StepDefinitions
{
    // ...

    [When(@"I press add")]
    public void WhenIPressAdd()   // R# thinks this is unused
    {
        _calculator.PressAdd();
    }

    // ...
}

如何告诉 ReSharper 实际使用了具有 [Given][When][Then] 属性(等)的方法?我不想使用// ReSharper disable UnusedMember.Global cmets。

我还可以用[JetBrains.Annotations.UsedImplicitly] 标记每个方法(或整个类)。我也不是特别想这样做。

【问题讨论】:

  • 奇怪的是,在另一台计算机上,R# 不会警告“未使用”方法。是否有我可以更改的配置设置?

标签: resharper resharper-5.0


【解决方案1】:

您需要使用 JetBrains Annotations,并使用 MeansImplicitUseAttribute 标记属性。您可以直接引用JetBrains.Annotations.dll,也可以复制注释源代码(来自 ReSharper / Options / Code Inspection / 代码注释)到您的解决方案中。

如果您需要注释某些不属于您的外部程序集,您需要在以下文件夹中创建一个外部注释文件 (xml):%ReSharperInstallDir%\Bin\ExternalAnnotations。例子很多,你可以复制一些。

如果您将外部注释文件命名为DllNameWithoutExtension.ExternalAnnotations.xml,它也可以与DLL 位于同一路径中。

【讨论】:

  • 是的,你可以。您需要在以下文件夹中创建一个外部注释文件 (xml):%ReSharperInstallDir%\Bin\ExternalAnnotations。例子很多,你可以复制一些。
  • @IlyaRyzhenkov 有没有办法使用库部署外部注释(我不想内联或引用 JetBrains.Annotations.dll 程序集),而不会强制用户将这些注释放入 %ReSharperInstallDir% \Bin\ExternalAnnotations 文件夹?
  • 如果您将外部注释文件命名为 DllNameWithoutExtension.ExternalAnnotations.xml,它也可以与 DLL 位于同一路径中 - 非常适合我的库。我将此文件作为我的 C# 项目的一部分,并将其设置为在构建时复制到输出目录。
  • 有类似MeansCanBeNull 的东西吗?我有一个自定义属性,我希望 R# 将其视为 CanBeNull 属性。
【解决方案2】:

有很多示例,但我想更明确一点,以防您不想追踪示例。 :)

在 %ReSharperInstallDir%\Bin\ExternalAnnotations 中使用属性程序集 (.xml) 的名称创建一个文件。例如,我制作了 Microsoft.VisualStudio.QualityTools.CodedUITestFramework.xml 并将这个 XML 放入其中:

<assembly name="Microsoft.VisualStudio.QualityTools.CodedUITestFramework">
  <member name="T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute">
    <attribute ctor="M:JetBrains.Annotations.MeansImplicitUseAttribute.#ctor" />
  </member>
</assembly>

重启 VS,你就上路了!

【讨论】:

    【解决方案3】:

    这些答案有所帮助,但如果您想装饰一个界面,您将需要使用 UsedImplicitly 属性,但值得注意的是

        [UsedImplicitly]
        public interface ISomeInterface
        {
            //... stuff
        }
    

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 2016-05-26
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2020-01-19
      相关资源
      最近更新 更多