Как сообщить 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]
. Я тоже не хочу этого делать.
Ответы
Ответ 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, и вы на пути!