Как мне сказать ReSharper, что атрибут означает, что метод используется? - PullRequest
27 голосов
/ 20 мая 2010

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

Ответы [ 2 ]

28 голосов
/ 21 мая 2010

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

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

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

9 голосов
/ 20 июня 2012

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

Создайте файл с именем сборки атрибута (.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, и вы уже в пути!

...