Zrozumienie różnic między starszymi analizatorami FxCop (analiza binarna) i analizatorami platformy .NET (analiza źródłowa) może być nieco mylące. Ten artykuł ma na celu rozwiązanie niektórych pytań.
Jaka jest różnica między starszymi analizatorami FxCop i .NET?
Starsza wersja FxCop uruchamia analizę po kompilacji na skompilowanym zestawie. Jest on uruchamiany jako oddzielny plik wykonywalny o nazwie FxCopCmd.exe. FxCopCmd.exe ładuje skompilowany zestaw, uruchamia analizę kodu, a następnie raportuje wyniki (lub diagnostykę).
Analizatory .NET są oparte na platformie kompilatora .NET ("Roslyn"). Można je włączyć z zestawu .NET SDK lub zainstalować je jako pakiet NuGet, do którego odwołuje się projekt lub rozwiązanie. Analizatory uruchamiają analizę opartą na kodzie źródłowym podczas wykonywania kompilatora. Analizatory są hostowane w procesie kompilatora, csc.exe lub vbc.exe i uruchamiają analizę podczas kompilowania projektu. Wyniki analizatora są raportowane wraz z wynikami kompilatora.
Jaka jest różnica między analizatorami FxCop i analizatorami platformy .NET?
Zarówno analizatory FxCop, jak i analizatory platformy .NET odwołują się do implementacji analizatora fxCop reguł urzędu certyfikacji platformy kompilatora .NET ("Roslyn"). Przed programem Visual Studio 2019 16.8 i .NET 5.0 te analizatory są dostarczane jako Microsoft.CodeAnalysis.FxCopAnalyzers
pakiet NuGet. Począwszy od programów Visual Studio 2019 16.8 i .NET 5.0, te analizatory są dołączone do zestawu .NET SDK. Są one również dostępne jako Microsoft.CodeAnalysis.NetAnalyzers
pakiet NuGet. Rozważ migrację z analizatorów FxCop do analizatorów platformy .NET.
Czy polecenie Uruchom analizę kodu uruchamia analizatory platformy .NET?
Przed wydaniem programu Visual Studio 2019 16.5 po wybraniu pozycji Analizuj analizę>kodu przebiegu wykonuje starszą analizę. Począwszy od programu Visual Studio 2019 16.5, opcja menu Uruchom analizę kodu wykonuje analizatory oparte na platformie Roslyn dla wybranego projektu lub rozwiązania. Jeśli zainstalowano analizatory platformy .NET, zostaną one również wykonane. Aby uzyskać więcej informacji, zobacz How to: Run Code Analysis Manually for Managed Code (Instrukcje: ręczne uruchamianie analizy kodu dla kodu zarządzanego).
Czy analizatory właściwości projektu RunCodeAnalysis msbuild są uruchamiane?
L.p. Właściwość RunCodeAnalysis w pliku projektu (na przykład csproj) jest używana tylko do wykonywania starszej wersji FxCop. Uruchamia ono zadanie msbuild po kompilacji, które wywołuje FxCopCmd.exe.
Jak więc uruchamiać analizatory platformy .NET?
Aby uruchomić analizatory platformy .NET, najpierw włącz je z zestawu .NET SDK lub zainstaluj je jako pakiet NuGet. Następnie skompiluj projekt lub rozwiązanie z poziomu programu Visual Studio lub użyj programu msbuild. Ostrzeżenia i błędy generowane przez analizatory Roslyn będą wyświetlane na liście błędów lub w oknie polecenia.
Otrzymuję ostrzeżenie CA0507 nawet po zainstalowaniu pakietu NuGet analizatorów .NET
Jeśli zainstalowano analizatory .NET, ale nadal otrzymujesz ostrzeżenie CA0507 "Run Code Analysis" został wycofany na rzecz analizatorów FxCop, które działają podczas kompilacji", może być konieczne ustawienie właściwości RunCodeAnalysis msbuild w pliku projektu na wartość false. W przeciwnym razie analiza w starszej wersji zostanie wykonana po każdej kompilacji.
<RunCodeAnalysis>false</RunCodeAnalysis>
Które reguły zostały przeniesione do analizatorów platformy .NET?
Aby uzyskać informacje o tym, które starsze reguły analizy zostały przeniesione do analizatorów platformy .NET, zobacz Fxcop rule port status (Stan portu reguły Fxcop).
Ostrzeżenia analizy kodu są traktowane jako błędy
Jeśli projekt używa opcji kompilacji do traktowania ostrzeżeń jako błędów, ostrzeżenia analizatora mogą być wyświetlane jako błędy. Aby zapobiec traktowaniu ostrzeżeń analizy kodu jako błędów, wykonaj kroki opisane w artykule Często zadawane pytania dotyczące analizy kodu.