Подтвердить что ты не робот

Как сообщить ReSharper, что атрибут означает, что используется метод?

Я играю с 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]. Я тоже не хочу этого делать.

4b9b3361

Ответ 1

Вам нужно использовать аннотации JetBrains и пометить атрибут MeansImplicitUseAttribute. Вы можете напрямую ссылаться на JetBrains.Annotations.dll, или вы можете скопировать исходный код аннотаций (из ReSharper/Options/Code Inspection/Code Annotations) в ваше решение.

Если вам нужно аннотировать некоторую внешнюю сборку, которой вы не являетесь, вам нужно создать файл внешней аннотации (xml) в следующей папке: %ReSharperInstallDir%\Bin\ExternalAnnotations. Есть много примеров, вы можете просто скопировать некоторые из них.

Внешний файл аннотаций может также находиться на том же пути, что и DLL, если вы назовете его DllNameWithoutExtension.ExternalAnnotations.xml.

Ответ 2

Есть много примеров, но я хотел быть немного более явным, если вы не хотите отслеживать пример.:)

Создайте файл с именем сборки атрибута (.xml) в% ReSharperInstallDir%\Bin\ExternalAnnotations. Например, я сделал 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, и вы на пути!