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?
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? –
Czy jesteś pewien, że projekt obejmuje metody asynchroniczne? Zachowanie wynika z kompilacji kodu metod asynchronicznych. –
Tak, miał setki asynchronicznych metod. EDIT: Właśnie uruchomiłem FxCop ponownie, zachowanie to nie jest odtwarzalne w analizie Visual Studio –