我该如何告诉ReSharper一个属性表示方法已被使用?

31

我正在使用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注释。我也可以使用[JetBrains.Annotations.UsedImplicitly]标记每个方法(或整个类),但我并不特别想这么做。

奇怪的是,在另一台电脑上,R#没有警告“未使用”的方法。我可能改变了哪个配置设置吗? - Roger Lipscombe
3个回答

32
您需要使用 JetBrains 注释,并在属性上标记 MeansImplicitUseAttribute。您可以直接引用 JetBrains.Annotations.dll,或者将注释源代码(来自 ReSharper/ Options / Code Inspection / Code Annotations)复制到您的解决方案中。
如果您需要注释某个您不拥有的外部程序集,您需要在以下文件夹中创建一个外部注释文件(xml):%ReSharperInstallDir%\Bin\ExternalAnnotations。有很多示例,您可以直接复制一些。
外部注释文件也可以和 DLL 文件放在同一路径下,如果将其命名为 DllNameWithoutExtension.ExternalAnnotations.xml

4
可以的。您需要在以下文件夹中创建一个外部注释文件(xml):%ReSharperInstallDir%\Bin\ExternalAnnotations。有很多示例,您可以直接复制一些。 - Ilya Ryzhenkov
1
@IlyaRyzhenkov 有没有办法在不强制用户将这些注释放置到% ReSharperInstallDir%\ Bin \ ExternalAnnotations文件夹中的情况下,使用库部署外部注释(我不想内联或引用JetBrains.Annotations.dll程序集)? - hazzik
5
如果你将外部注释文件命名为 DllNameWithoutExtension.ExternalAnnotations.xml 并放在与 DLL 相同的路径下,它也可以正常工作 - 这对我的库非常完美。我将这个文件包含在我的 C# 项目中,并在构建时设置将其复制到输出目录。 - Lucero
有没有类似于 MeansCanBeNull 的东西?我有一个自定义属性,我希望 R# 将其视为其 CanBeNull 属性。 - vorou

10

有很多例子,但我想更明确一些,以防你不想跟踪一个例子。:)

在%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,即可开始!

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接