2013-03-27 13 views
12

ReSharper 7.1.1 Kontrola kod fałszywie donosi <location> elementów w pliku web.config jako zbędne, jeśli dotyczą one adresy URL, które nie odpowiadają bezpośrednio do folderów w drzewie źródłowym. Jeśli używasz ASP.NET MVC lub Web API, normalne jest, że masz ścieżki URL, które nie odpowiadają bezpośrednio żadnemu konkretnemu fizycznemu folderowi.Unikanie Resharper <location> web.config Ostrzeżenia z MVC i WebAPI

Jeśli przeprowadzisz inspekcję obejmującą cały system, otrzymasz dwa ostrzeżenia, a jedną z nich udało się wyłączyć, ale nie mogę się dowiedzieć, jak wyłączyć tę drugą.

Pierwsza to ostrzeżenie "Element nadmiarowy elementu". ReSharper zanika całą sekcję lokalizacji. Oto przykład czegoś będzie to fade out:

<location path="FederationMetadata"> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

Trzeba tę konfigurację, jeśli używasz stowarzyszonego logowanie przez ACS i chcesz zaoferować końcowy metadanych do tego. Ale nie będzie odpowiedniej ścieżki tego imienia.

(Ściśle mówiąc to szczególności nie ma nic wspólnego z MVC lub Web API. Podałem ten przykład, ponieważ jest to dość powszechne jeden. Jednak mój projekt ma także kilka <location> elementy odpowiadające ścieżek obsługiwanych przez MVC i konfiguracji routingu Web API i mają ten sam problem: główna przyczyna wydaje się być taka sama: ReSharper nie widzi niczego, co odpowiada tej lokalizacji w projekcie, więc błędnie wywnioskuje, że jest błędne, dotyka kontrolerów MVC i Web API, oraz także dowolne ścieżki, które są dostępne ze względu na takie moduły.)

To proste, aby pozbyć się tego pierwszego ostrzeżenia: możesz je wyłączyć w ustawieniach kontroli bezpieczeństwa.

Następnie kończy się drugie ostrzeżenie: "Element lokalizacji nie jest używany: nie znaleziono elementu projektu w FederationMetadata" (i podobne ostrzeżenia dla każdego kontrolera, który ma odpowiednie elementy <location>).

Ten pojawia się tylko w panelu "Wyniki inspekcji", który pojawia się podczas kontroli całego rozwiązania. Żadne ze zwykłych widżetów kontrolnych nie pojawi się, gdy zajrzysz do pliku źródłowego. I wydaje się, że ten nie wydaje się być wyłączony.

Wiem, że można kliknąć prawym przyciskiem myszy i wybrać "Ukryj ..." (chociaż wydaje się, że jest to problem "Nadmiarowa lokalizacja", ten, który już został wyłączony w ustawieniach), ale o ile Mogę powiedzieć, że ukrywanie wyników inspekcji jest lokalne dla mojej maszyny. Chcę skonfigurować współużytkowane ustawienia dotarkowe tak, aby nigdzie nie wyświetlało tego ostrzeżenia.

Dążę do czystych wyników inspekcji dla wszystkich użytkowników, nie powodując, że każdy użytkownik ukrywa wyniki. Resharper zgłosiła ten problem fałszywie - web.config jest w porządku, po prostu R # źle to zrozumiał. Czy ktoś wie, jak mogę usunąć to drugie ostrzeżenie? (Albo, lepiej, czy jest jakiś sposób, że mogę wzmocnić R #, aby móc wiedzieć, że te "ukryte" lokalizacje rzeczywiście istnieją?)

Odpowiedz

0

Wydaje się, że istnieją dwa kawałki to:

  1. Konfigurowanie droga internetowa jest najlepszym sposobem radzenia sobie z obu błędów
  2. Widocznie trzeba przenieść ustawienia z pliku DotSettings.user i do Twój wspólny plik zespół ręcznie

Jeśli klikniesz na atrybucie ścieżki wykraczająca (oddanie daszka w wartości atrybutu), a następnie czekać na rzecz R # podręcznego do stawienia się, jego menu powinno oferować sposobem utworzenia "mapowanie ścieżek" lub edytować np isting mapowania dla witryny. Możesz użyć tego, aby powiedzieć R #, gdzie znajduje się właściwy plik odpowiadający ścieżce. Lub, ponieważ nie ma takiego pliku w tym przypadku, możesz ustawić akcję Ignoruj ​​dla tej ścieżki.

Po tym, nie pojawi się żadne z wymienionych ostrzeżeń.

Niestety, okno dialogowe mapowania ścieżek jest (podobnie jak okno dialogowe problemów dotyczących filtrów) jednym z tych, które mają tylko przycisk "Zapisz", i nie ma przycisku "Zapisz w", który nie daje kontroli nad tym, gdzie będą działać ustawienia. W praktyce wydają się one kończyć w pliku <project>.DotSettings.user dla projektu WWW.

Ale okaże się, że działa po prostu plik, jeśli otworzysz ten plik w edytorze tekstu, wyciąć ustawienia i wkleić je do ustawień rozwiązania wspólne zespołu.Wydaje się, że pozbywa się obu ostrzeżeń w sposób, który powinien dotyczyć wszystkich uczestników projektu.

(Powinieneś być w stanie użyć podobnej sztuczki w ustawieniach "Filtr problemów", chociaż musisz szukać w innym miejscu, które kończy się ustawieniami globalnymi, ale możesz użyć okna dialogowego Zarządzaj opcjami, aby wyeksportować tych, a następnie można otworzyć wyeksportowane ustawienia, a następnie skopiować je do ustawień rozwiązanie zespołu współdzielony)

1

Możesz zmienić ustawienia R # tak, aby nie były lokalne dla twojej maszyny .

  1. w VS, kliknij menu RESHARPER, a następnie kliknij Manage Options...
  2. Dwukrotnie kliknij pozycję team-shared (powinien być środkowy między This computer i personal).

Zmieniając tutaj ustawienia, utworzy on plik [ProjectName].csproj.DotSettings w projekcie. Jeśli sprawdzisz ten plik w kontroli źródła, ustawienia zostaną udostępnione innym użytkownikom R #, którzy rozwijają się w projekcie. AFAIK, każde ustawienie, które możesz zmienić (na przykład mówiąc R #, że powaga kontroli powinna być inna niż domyślna), powinieneś móc dodać ustawienia współdzielone przez zespół.

Jeśli chodzi o twój błąd web.config, mam jeszcze większą wołowinę z R #, ponieważ gdy jest włączona, tracę intellisense na plikach web.config i app.config. Możesz być w stanie powiedzieć R #, aby zignorował błąd z następującymi, chociaż nie jestem pewien, czy jest to rozwiązanie, którego szukasz, ponieważ zignoruje wszystkie problemy R # z plikiem web.config.

  1. Po dwukrotnym kliknięciu na edycję team-shared ustawienia (opisane powyżej), kliknij element Settings pod Code Inspection menu po lewej stronie.
  2. Kliknij przycisk Edit Items to Skip button.
  3. Pod Files and folders to skip when analysing kliknij Add File....
  4. Przejdź do pliku web.config i dodaj go.

To mówi R #, aby zignorował cały plik web.config podczas analizy. Ponownie, nie jestem pewien, czy jest to rozwiązanie, które chcesz, ale może działać w celu powstrzymania fałszywych sugestii, które widzisz.

Update (odpowiedź na komentarze)

Można faktycznie zmienić opcje kontrolne z menu kontekstowego VS. Po wyświetleniu okna dialogowego Inspection Options z przyciskami opcji (Do not show - Error) dostępny jest przycisk Save To. Kliknij, aby zapisać ustawienia w udostępnianych przez zespół ustawieniach DotSettings.

+0

miałem już '[NazwaProjektu] .csproj. DotSettings' zaznaczone na kontrolę źródła. Ale czy możesz użyć tego do zapisania Ukryj ustawienia? (Tj. Zachowanie, które pojawia się po wybraniu Ukryj w menu kontekstowym panelu Inspekcja). Te ustawienia Ukryj nie pojawiają się w oknie dialogowym Opcje. O ile wiem, możesz je skonfigurować tylko za pośrednictwem tego menu kontekstowego. Ta opcja ukrywania wydaje się być jedynym sposobem na pozbycie się tego błędu (poza tym, jak sugerujesz, całkowicie wyłączając web.config). –

+0

... możesz także użyć przycisku Filtruj problemy ... na panelu Inspekcja, aby ukryć te rzeczy. Ale znowu nie ma sposobu, aby zapisać filtrowanie do współużytkowanych zestawów DotSettings dla całego zespołu. –

+0

Podczas gdy Twoje podejście działa doskonale w przypadku ostrzeżenia "Element nadmiarowy elementu" (jak wskazałem w moim pytaniu), Twoja aktualizacja nadal nie pomaga w wyświetleniu ostrzeżenia "Element lokalizacji nie jest używany" w "Wynikach inspekcji" " płyta. Okno dialogowe, które określa, czy dany błąd pojawia się (okno dialogowe "Problemy z filtrem") nie ma przycisku "Zapisz w" (w przeciwieństwie do okna dialogowego Kontrola jakości). I wydaje się, że nie ma na to żadnego ustawienia w Manage Options ... –

8

właśnie dodanych w tym:.

<!-- ReSharper disable WebConfig.RedundantLocationTag --> 
    <!-- ReSharper disable WebConfig.WebConfigPathWarning --> 
    <location path="api"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 
    <!-- ReSharper restore WebConfig.RedundantLocationTag --> 
    <!-- ReSharper restore WebConfig.WebConfigPathWarning -->