2014-07-19 11 views
7

Ho il seguente software:VS2013 con ReSharper 8.2 non riconosce i contratti di codice?

  • Visual Studio 2013 Aggiornamento 2
  • Code Contracts (1.6.60617.15)
  • ReSharper C# edizione (8.2.0.2160)
  • Code Contracts ReSharper (1.0.0.0)

Quando apro un metodo con contratti di codice, ReSharper è confuso circa il contratto:

enter image description here

Mi avverte che chapter può essere nullo, anche se il contratto prevede che non sia. Inoltre:

enter image description here

Il contratto metodo invariante è contrassegnato come never used. Tecnicamente corretto, ma non dovrebbe dirmelo perché il metodo viene utilizzato dal programma di riscrittura del contratto per ottenere informazioni su ogni invariante. Come faccio a insegnare a ReSharper sui contratti di codice per correggere questi due problemi?

+1

Incollare il codice come testo, non come immagine. –

+0

Anche feedback a Microsoft. Quindi, Microsoft correggerà il problema nel prossimo aggiornamento. – Shell

+2

Per dimostrare il problema, avevo bisogno dell'aspetto del problema in quanto qualcuno che avesse familiarità con l'ambiente di ReSharper avrebbe potuto vederlo. A cosa serve incollare il codice, @ SonerGönül? –

risposta

3

per ottenere questo lavoro per la libreria di classi portatile, si prega di effettuare le seguenti operazioni:

  1. Creare una nuova cartella nella ExternalAnnotationsC:\Program Files (x86)\JetBrains\ReSharper\v8.2\Bin\ directory;

  2. Mettere System.Diagnostics.Contracts.xml lì con il seguente contenuto:

    <assembly name="System.Diagnostics.Contracts"> 
    <member name="M:System.Diagnostics.Contracts.Contract.Assume(System.Boolean)"> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Assume(System.Boolean,System.String)"> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Assert(System.Boolean)"> 
        <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Assert(System.Boolean,System.String)"> 
        <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)"> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean,System.String)"> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Requires``1(System.Boolean)"> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Requires``1(System.Boolean,System.String)"> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Invariant(System.Boolean)"> 
        <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.Invariant(System.Boolean,System.String)"> 
        <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>condition:false=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="M:System.Diagnostics.Contracts.Contract.ReportFailure(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception)"> 
        <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> 
        <attribute ctor="M:JetBrains.Annotations.ContractAnnotationAttribute.#ctor(System.String)"> 
         <argument>=&gt;halt</argument> 
        </attribute> 
    </member> 
    <member name="T:System.Diagnostics.Contracts.ContractInvariantMethodAttribute"> 
        <attribute ctor="M:JetBrains.Annotations.MeansImplicitUseAttribute.#ctor" /> 
    </member> 
    <member name="T:System.Diagnostics.Contracts.ContractClassForAttribute"> 
        <attribute ctor="M:JetBrains.Annotations.MeansImplicitUseAttribute.#ctor" /> 
    </member> 
    </assembly> 
    
  3. Chiudere tutte le istanze di Visual Studio (solo per dare ReSharper la possibilità di ricaricare le annotazioni), riaprire Visual Studio e la soluzione di carico necessarie;

  4. C'è una possibilità che è necessario pulire le cache di ReSharper (ReSharper | Opzioni | Ambiente | Generale | Cancella cache);

Anche io depositata a new ticket di sostenere tale caso in estensione ReSharper ExternalAnnotations predefinita.

2

Da allora ho contratto JetBrains tramite il supporto via e-mail, e ho raggiunto un'improvvisa realizzazione. Stavo lavorando in una soluzione Portable Class Library. Allegherò la corrispondenza via e-mail da parte mia a questa risposta e aggiornerò questa risposta con le risposte di follow-up (se ce ne sono) per coloro che potrebbero avere un problema simile in questo momento.

Grazie per la rapida risposta. Ora ho installato 8.2.1000.4556 e aggiornato l'estensione ExternalAnnotations su 8.2.1001. Il plug-in "ReSharper Code Contracts 1.0.0" di è in realtà chiamato "ReSharper.ContractExtensions 0.7.51" nella pagina del plug-in. Sono utilizzando .NET 4.5 e non ho definito i simboli di compilazione, né I fa riferimento a qualsiasi libreria correlata ai Contratti di codice.

Tuttavia, mi sembra di aver trascurato di menzionare che stavo lavorando in un progetto di libreria di classi portatili . Dal momento che non ho pensato a questa possibilità , ho creato un progetto di test per testare l'installazione di ReSharper con. Ho usato un progetto regolare e un progetto di libreria Portable Class . Il risultato potrebbe non essere sorprendente per voi: tutto funziona come previsto nel progetto normale, ma i Contratti di codice non sono riconosciuti nella libreria di classi portatili.

È quindi facile concludere che non è ancora disponibile il supporto per le librerie di classi portatili , o semplicemente non è stato testato . Ho allegato il progetto di test a questa e-mail. Se si apre il file "Class1.cs" nel progetto "ClassLibrary1" da VS2013 Update 2 con ReSharper 8.2.1, si dovrebbero vedere gli stessi avvisi di I do.

Spero che prendiate in considerazione l'aggiunta di supporto per questi tipi di progetto. Posso solo immaginare che sia qualcosa di poco sbagliato in un rilevamento di supporto , ma ahimè, non conosco il codice di base, né dovrei provare a ipotesi.Posso solo sperare che considererai questa funzionalità.

+0

Usa la risposta di Alexander. È il supporto di JetBrains che mi ha aiutato. –

Problemi correlati