2010-05-20 12 views
25

sto giocando con SpecFlow e ReSharper pensa che le mie definizioni passo sono inutilizzati (credo perché sono utilizzati attraverso la riflessione):Come si comunica a ReSharper che un attributo indica che viene utilizzato un metodo?

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

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

    // ... 
} 

Come posso dire a ReSharper che i metodi con [Given], [When], [Then] gli attributi (ecc.) sono effettivamente usati? Non voglio usare i commenti // ReSharper disable UnusedMember.Global.

Potrei anche contrassegnare ogni metodo (o l'intera classe) con [JetBrains.Annotations.UsedImplicitly]. Anche io non voglio particolarmente farlo.

+0

Stranamente, su un altro computer, R # non avvisa dei metodi "inutilizzati". C'è un'impostazione di configurazione che potrei avere cambiato? –

risposta

26

È necessario utilizzare le annotazioni JetBrains e contrassegnare l'attributo con MeansImplicitUseAttribute. È possibile fare riferimento JetBrains.Annotations.dll direttamente, oppure si può copiare il codice sorgente di annotazioni (da ReSharper/Opzioni/Codice di ispezione/Codice NOTE) nella vostra soluzione.

Se è necessario annotare un gruppo esterno che non si possiede, è necessario creare un file di annotazione esterna (xml) nella seguente cartella: %ReSharperInstallDir%\Bin\ExternalAnnotations. Ci sono molti esempi, puoi semplicemente copiarne alcuni.

Il file delle annotazioni esterne può anche essere nello stesso percorso della DLL se lo si chiama DllNameWithoutExtension.ExternalAnnotations.xml.

+0

Fresco. C'è un modo per contrassegnare un attributo che non possiedo? –

+4

Sì, è possibile. È necessario creare un file di annotazione esterna (xml) nella seguente cartella:% ReSharperInstallDir% \ Bin \ ExternalAnnotations. Ci sono molti esempi, puoi semplicemente copiarne alcuni. –

+0

@IlyaRyzhenkov c'è un modo per distribuire annotazioni esterne con la libreria (non voglio inline o fare riferimento all'assembly JetBrains.Annotations.dll) senza forzare l'utente a inserire queste annotazioni nella cartella% ReSharperInstallDir% \ Bin \ ExternalAnnotations? – hazzik

9

Ci sono molti esempi, ma volevo essere un po 'più esplicito nel caso in cui non volessi rintracciare un esempio. :)

Creare un file con il nome dell'assembly (.xml) dell'attributo in% ReSharperInstallDir% \ Bin \ ExternalAnnotations. Ad esempio, ho fatto Microsoft.VisualStudio.QualityTools.CodedUITestFramework.xml e messo questo XML all'interno di esso:

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

Riavvia VS e tu sei sulla strada giusta!

Problemi correlati