如何告诉ReSharper一个属性意味着使用了一个方法?

时间:2010-05-20 16:33:39

标签: resharper resharper-5.0

我正在玩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]标记每个方法(或整个类)。我也不是特别想这样做。

3 个答案:

答案 0 :(得分:28)

您需要使用JetBrains Annotations,并使用MeansImplicitUseAttribute标记该属性。您可以直接引用JetBrains.Annotations.dll,也可以复制注释源代码(来自 ReSharper / 选项 / 代码检查 / < em>代码注释)到您的解决方案中。

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

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

答案 1 :(得分:9)

有很多例子,但如果你不想追查一个例子,我想要更加明确一些。 :)

在%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,您就可以了!

答案 2 :(得分:0)

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

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