2014-07-19 36 views
7

Mam następujące oprogramowanie:VS2013 z ReSharper 8.2 nie rozpoznaje umowy kodu?

  • Visual Studio 2013 Update 2
  • Kontrakty Code (1.6.60617.15)
  • ReSharper C# Edition (8.2.0.2160)
  • Kontrakty Kod ReSharper (1.0.0.0)

Kiedy otwieram metodę z umów kodowych ReSharper jest zagubiony zamówienia:

Ostrzega mnie, że chapter może być pusty, mimo że umowa nie wymaga tego. Też:

enter image description here

Umowa metoda niezmienna jest oznaczony jako never used. Technicznie poprawne, ale nie powinno mi to mówić, ponieważ metoda jest używana przez przeszukiwacza kontraktów kodu, aby uzyskać informacje o każdym niezmienniku. Jak mam nauczać ReSharpera o umowach kodowych, aby poprawić te dwa problemy?

+1

Wklej swój kod jako tekst, a nie jako obraz. –

+0

Również opinie do firmy Microsoft. Tak, Microsoft poprawi ten problem w następnej aktualizacji. – Shell

+2

Aby zademonstrować problem, potrzebowałem pojawienia się problemu, ponieważ ktoś zaznajomiony ze środowiskiem ReSharper go zobaczy. Co dobrego dałoby wklejenie kodu, @ SonerGönül? –

Odpowiedz

3

Aby uzyskać tej pracy Portable Class Library, należy wykonać następujące czynności:

  1. Utwórz nowy folder ExternalAnnotations w C:\Program Files (x86)\JetBrains\ReSharper\v8.2\Bin\ katalogu;

  2. Put System.Diagnostics.Contracts.xml tam o następującej treści:

    <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. Zamknij wszystkie instancje visual studio (wystarczy dać ReSharper szansę przeładować adnotacje), ponownie otworzyć Visual Studio i załadować potrzebne rozwiązania;

  4. Istnieje szansa na wyczyszczenie pamięci podręcznej ReSharper (Opcje |

Również złożone a new ticket o wspieraniu takiej sprawy w rozszerzeniu ReSharper ExternalAnnotations domyślnie.

2

Odkąd zamówiłem JetBrains za pośrednictwem poczty e-mail, nagle doszedłem do wniosku. Pracowałem w rozwiązaniu Portable Class Library. Załączę korespondencję e-mail z mojej strony do tej odpowiedzi i zaktualizuję tę odpowiedź za pomocą odpowiedzi uzupełniających (jeśli istnieją) dla tych, którzy mogą mieć podobny problem w tej chwili.

Dziękuję za szybką odpowiedź. Zainstalowałem teraz wersje 8.2.1000.4556 i zaktualizowałem rozszerzenie ExternalAnnotations do wersji 8.2.1001. Wymieniona powyżej wtyczka "ReSharper Code Contracts 1.0.0" jest w rzeczywistości nazywana "ReSharper.ContractExtensions 0.7.51" na stronie wtyczki. Jestem przy użyciu .NET 4.5 i nie zdefiniowałem symboli kompilacji ani nie odniosłem się do żadnej biblioteki związanej z Code Contracts.

Jednak wydaje mi się, że zapomniałem wspomnieć, że pracowałem w bibliotece przenośnej klasy . Ponieważ w ogóle nie myślałem o tej , stworzyłem projekt testowy do przetestowania mojej instalacji ReSharper z. Użyłem zwykłego projektu i projektu biblioteki przenośnej klasy . Rezultat może nie być dla Ciebie zaskakujący: wszystko, co , działa zgodnie z przeznaczeniem w zwykłym projekcie, ale umowy kodowe nie są rozpoznawane w przenośnej bibliotece klas.

Jest zatem łatwo stwierdzić, że nie ma jeszcze wsparcia dla bibliotek przenośnych klasy , lub jest to po prostu coś, co nie zostało przetestowane pod kątem . Załączam projekt testowy do tego e-maila. Jeśli otworzysz plik "Class1.cs" w projekcie "ClassLibrary1" z VS2013 Update 2 za pomocą ReSharper 8.2.1, powinieneś zobaczyć te same ostrzeżenia co I do.

Mam nadzieję, że rozważysz dodanie wsparcia dla tych typów projektów. Mogę tylko wyobrażam sobie, że jest coś, co nie idzie źle w wykrywaniu wsparcia , ale niestety, nie znam twojej bazy kodu ani nie powinienem próbować odgadnąć .Mogę tylko mieć nadzieję, że rozważysz tę funkcję.

+0

Użyj odpowiedzi Aleksandra. To ten z pomocy JetBrains, która mi pomaga. –