2016-11-09 32 views
6

Używam narzędzia FxCopCmd do statycznej analizy kodu. Ponieważ mieliśmy już ogromny kod źródłowy, oparliśmy istniejące problemy za pomocą narzędzia baseline.exe dołączonego do FxCop.FxCop: Komunikat o supresji dla metody asynchronicznej

Obserwuję, że jeśli dodaję nową metodę do mojej klasy C#, to niektóre komunikaty o blokowaniu w pliku GlobalSuppression.cs przestaną działać i otrzymuję problemy z kodem, którego nie dotknąłem.

Przykład:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public async Task<string> method1() 
     { 
      string a = ""; 
      a.Equals("abc", StringComparison.InvariantCultureIgnoreCase); 
      return a; 
     } 

     static void Main(string[] args) 
     { 

     }   
    } 
} 

ten wyrzuca następujący błąd:

CA1031 : Microsoft.Design : Modify 'Program.d__0.MoveNext()' to catch a more specific exception than 'Exception' or rethrow the exception

stłumić wydać 'CA1309 UseOrdinalStringComparison' I dodaje następujący komunikat tłumienia w GlobalSuppression.cs złożenia

[module: SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", Scope="member", Target="ConsoleApplication1.Program.d__0.MoveNext()", MessageId="System.String.Equals(System.String,System.StringComparison)", Justification="")]

Ale jeśli dodaję jeszcze jedną metodę w klasie, to to pomijam wiadomość przestaje działać. Dzieje się tak dlatego, że metoda 1 jest asynchroniczna i dlatego tworzona jest nowa klasa (refer this) w skompilowanym kodzie (która w pierwszym przypadku była <method1>d__0). Ale kiedy dodaję inną metodę przed metodą1, nowa klasa utworzona w skompilowanym kodzie ma nazwę <method1>d__1. W związku z tym komunikat o usunięciu nie jest stosowany i FxCop ponownie zaczyna pokazywać błędy w kodzie.

Czy istnieje sposób na trwałe tłumienia błędów FxCop dla metod asynchronicznych?

+0

Nigdy nie widziałem tego zachowania nawet w projektach z problemami 15k + FxCop przy użyciu analizy Visual Studio. Czy próbowałeś z tym? –

+0

Czy jesteś pewien, że projekt obejmuje metody asynchroniczne? Zachowanie wynika z kompilacji kodu metod asynchronicznych. –

+0

Tak, miał setki asynchronicznych metod. EDIT: Właśnie uruchomiłem FxCop ponownie, zachowanie to nie jest odtwarzalne w analizie Visual Studio –

Odpowiedz

2

Więc nawet po ustawieniu nagrody, pytanie pozostało bez odpowiedzi. Jednak znalazłem obejście (jeśli nie rozwiązanie).

Wymieniony problem spowodowany jest wygenerowanym przez kompilator kodem metod asynchronicznych. Ponieważ FxCopCmd działa w dll, ponieważ kod generowany przez kompilator jest zmieniany, istniejące komunikaty o tłumieniu stają się bezużyteczne. Program Visual Studio nie uruchamia analizy kodu jedynie za pomocą FxCopCmd. Przeprowadza analizę kodu inteligentnie ignorując metody asynchroniczne. (Zgodnie z moim badaniem, nie wykonuje żadnej analizy kodu na metodach asynchronicznych.) Musi to być spowodowane danym problemem.)

Aby uzyskać takie samo zachowanie jak Visual Studio w kompilacjach CI, możemy użyć fxcoptask.dll do uruchamiania analizy FxCop na kodzie. Zapoznaj się z this answer, aby dowiedzieć się, jak zintegrować FxCop w kompilacji. To rozwiąże problemy wymienione w problemie. Ponadto daje wiele opcji dostosowywania.