2010-04-23 9 views
20

Włączyłem "Traktuj ostrzeżenia jako błędy" dla mojego projektu VS, co oznacza, że ​​dostaję błędy za brakującą dokumentację (ładne przypomnienie dla tego konkretnego projektu).suppress ostrzeżenie dla wygenerowanego kodu C#

Jednak część kodu jest generowana przez niestandardowe narzędzie, które nie wstawia dokumentacji xml, więc szukam z dala, aby zignorować brakującą dokumentację XML dla wygenerowanego kodu, a nie dla całego projektu. Nie mam wpływu na rzeczywisty wygenerowany plik i nie mogę wstawić niczego w pliku (ponieważ jest on często regenerowany przez narzędzie), więc szukam czegoś poza wygenerowanym plikiem (wygenerowane klasy są częściowe, jeśli to pomaga)

+1

@TomTom: Cóż, nie uważam tego za poprawne rozwiązanie (i nazywając go głupim jest trochę przesadzone, autor ma nas obu pokonanych przez 100k punktów tutaj na SO ...) –

Odpowiedz

9

EDYTOWANIE: Zobacz komentarze wskazujące, że ten nie pracy z C# 4. Nie jestem jasne, czy działało we wcześniejszych wersjach kompilatora. Specyfikacja C# 4 czyni to jednak całkiem jasnym. Sekcja 2.5.8.1 stwierdza:

Dyrektywa #pragma warning restore przywraca wszystkie lub podane zestawy ostrzeżeń do stanu, który obowiązywał na początku jednostki kompilacji. Należy zauważyć, że jeśli określone ostrzeżenie zostało wyłączone zewnętrznie, #pragma warning restore (dla wszystkich lub określonego ostrzeżenia) nie włączy ostrzeżenia ponownie.

Jeff ma numer workaround in a blog post - w zasadzie po to, aby ponownie przetworzyć wygenerowany automatycznie kod w ramach kompilacji.


Jak mówi Tom, można dodać „ignoruj” do całego projektu (build/Wyłącza ostrzeżenia - wpisać 1591 jako numer ostrzegawczy) - ale wtedy można przywrócić ostrzegając się na szczycie każdego z niewyspecjalizowanych generowane plików:

#pragma warning restore 1591 

to dość brzydki, ale działa (I właśnie przetestowane).

+0

@TomTom : W jaki sposób? Możesz dość łatwo zautomatyzować sprawdzanie, że masz tę pragmę na początku każdego nie wygenerowanego pliku. (OP może również mieć coś, co może sprawdzić oświadczenia o prawach autorskich itd. - można to bardzo łatwo zmodyfikować, aby uwzględnić tę pragmę.) Rezultat końcowy jest tym, co chce OP: błędy dla ręcznie pisanych plików, które nie mają komentarzy XML, i brak takich błędów dla wygenerowanych plików. –

+0

Zaakceptowanie tego jako odpowiedzi, ponieważ wszystkie inne nie rozwiązały problemu braku dotykania wygenerowanego pliku ... ładny, Jon –

+1

@Jon: To nie działa dla C# 4. Według specyfikacji, jeśli ostrzeżenie jest globalnie wyłączone (tj. przez projekt), przywracanie przywróci ten stan globalny (tj. wyłączony). Powinienem dodać, spróbowałem (nie tylko przeczytałem specyfikację). –

2

Najlepsze, co możesz zrobić, to pominąć konkretne ostrzeżenie w projekcie, które zawiera wygenerowany kod. Możesz to zrobić w Właściwości projektu na karcie Kompilacja. To nie jest idealne, ale brakuje w nim umieszczenia pragmy w wygenerowanym kodzie, jest to najlepsze, co możesz zrobić.

9

Najlepszym sposobem, aby uniknąć ostrzeżenia lub błędu Kod analizy na kod generowany jest do dekorowania wygenerowanych klas z GeneratedCodeAttribute i sprawiają, że plik kod kończy się wzór * .generated.cs.

Jeśli pliki kodowe mają również nagłówek pliku, należy miał te tagi:

//---------------------- 
// <auto-generated> 
//  Tool description 
// </auto-generated> 
//---------------------- 

Nie jest to obowiązkowe, ale jeśli masz nagłówek pliku kodu jest to dobra praktyka.

W ten sposób FxCop i inne narzędzia, takie jak StyleCop, nie będą już analizować Twojego kodu.

Nieprawidłowe jest to, że narzędzie generowania kodu nie rozkłada elementów kodu za pomocą wspomnianego powyżej atrybutu. Spróbuj sprawdzić, czy istnieje opcja włączenia w ustawieniach narzędzi lub skontaktuj się z zespołem projektowym.


EDIT: Czy wygenerowane klasy są częściowe klas i zrobić rzeczywistą nazwę zajęć i liczba zmienia się często? Ponieważ jeśli wygenerowana zawartość kodu nie porusza się dużo, można po prostu utworzyć inny plik kodu i zadeklarować wygenerowaną klasę częściową, aby udekorować je za pomocą GeneratedCodeAttribute. Raz uratował mi życie (i mój czas!).

+1

"Nie mam wpływu na rzeczywisty wygenerowany plik" - nie ma tej reguły ta odpowiedź? –

+0

Rozumiem, na czym polega problem, miałem dokładnie ten sam problem z DSL pochodzącym z Codeplexu Faktem jest, że jeśli jest często regenerowany, nie chcesz ręcznie modyfikować go za każdym razem. Skontaktowałem się z programistą Codeplex, który rozwiązał problem, w rzeczywistości są dwa rozwiązania: szukanie ustawienia w narzędziu lub kontaktowanie się z zespołem projektowym: – Ucodia

+0

@TomTom (and @TheRHCP): jak Jon wskazuje, nie mogę kontrolować wygenerowany kod, więc nie ma go o dodawaniu atrybutów. Ponadto, klasy częściowe mogą rozwiązać brakujące komentarze na temat klasy, ale nie pomogą moim właściwościom/metodom ... –