31 votes

Comment indiquer à ReSharper qu'un attribut signifie qu'une méthode est utilisée ?

Je joue avec SpecFlow et ReSharper pense que mes définitions de pas sont inutilisées (je suppose qu'elles sont utilisées par réflexion) :

[Binding]
public class StepDefinitions
{
    // ...

    [When(@"I press add")]
    public void WhenIPressAdd()   // R# thinks this is unused
    {
        _calculator.PressAdd();
    }

    // ...
}

Comment puis-je dire à ReSharper que les méthodes avec [Given] , [When] , [Then] (etc.) sont effectivement utilisés ? Je ne veux pas utiliser // ReSharper disable UnusedMember.Global commentaires.

Je pourrais aussi marquer chaque méthode (ou la classe entière) avec [JetBrains.Annotations.UsedImplicitly] . Je n'ai pas particulièrement envie de faire ça non plus.

32voto

Ilya Ryzhenkov Points 5731

Vous devez utiliser JetBrains Annotations, et marquer l'attribut avec une balise MeansImplicitUseAttribute . Vous pouvez soit faire référence JetBrains.Annotations.dll directement, ou vous pouvez copier le code source des annotations (à partir de ReSharper / Options / Inspection du code / Annotations du code ) dans votre solution.

Si vous devez annoter un assemblage externe que vous ne possédez pas, vous devez créer un fichier d'annotation externe (xml) dans le dossier suivant : %ReSharperInstallDir%\Bin\ExternalAnnotations . Les exemples ne manquent pas, vous n'avez qu'à en copier certains.

Le fichier d'annotations externes peut également se trouver dans le même chemin que la DLL si vous le nommez DllNameWithoutExtension.ExternalAnnotations.xml .

10voto

rythos42 Points 440

Il existe de nombreux exemples, mais je voulais être un peu plus explicite au cas où vous ne voudriez pas chercher un exemple :)

Créez un fichier portant le nom de l'assemblage de l'attribut (.xml) dans %ReSharperInstallDir%. \Bin\ExternalAnnotations. Par exemple, j'ai créé Microsoft.VisualStudio.QualityTools.CodedUITestFramework.xml et j'y ai placé ce XML :

<assembly name="Microsoft.VisualStudio.QualityTools.CodedUITestFramework">
  <member name="T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute">
    <attribute ctor="M:JetBrains.Annotations.MeansImplicitUseAttribute.#ctor" />
  </member>
</assembly>

Redémarrez VS et vous êtes sur votre chemin !

0voto

workabyte Points 779

Ces réponses ont été utiles, mais il convient de noter que si vous cherchez à décorer une interface, vous voudrez utiliser la fonction UsedImplicitly attribut

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X