Często zadawane pytania dotyczące analizy kodu w programie Visual Studio

Ta strona zawiera odpowiedzi na niektóre często zadawane pytania dotyczące analizy kodu opartej na platformie .NET kompilatora w programie Visual Studio.

Analiza kodu a Plik EditorConfig

Czy należy używać funkcji analiza kodu lub EditorConfig do sprawdzania stylu kodu?

Analiza kodu i pliki EditorConfig działają ręcznie. Podczas definiowania stylów kodu w pliku EditorConfig lub na stronie Opcje edytora tekstów faktycznie konfigurujesz analizatory kodu wbudowane w program Visual Studio. Pliki EditorConfig mogą służyć do włączania lub wyłączania reguł analizatora, a także do konfigurowania pakietów analizatora NuGet.

EditorConfig a zestawy reguł

Czy należy skonfigurować analizatory przy użyciu zestawu reguł lub pliku EditorConfig?

Zestawy reguł i pliki EditorConfig mogą współistnieć i mogą służyć do konfigurowania analizatorów. Zarówno pliki EditorConfig, jak i zestawy reguł umożliwiają włączanie i wyłączanie reguł oraz ustawianie ich ważności.

Jednak pliki EditorConfig oferują również dodatkowe sposoby konfigurowania reguł:

Oprócz zestawów reguł i plików EditorConfig niektóre analizatory są konfigurowane za pomocą plików tekstowych oznaczonych jako dodatkowe pliki dla kompilatorów języka C# i VB.

Uwaga

  • Pliki EditorConfig mogą służyć tylko do włączania reguł i ustawiania ich ważności w programie Visual Studio 2019 w wersji 16.3 lub nowszej.
  • Pliki EditorConfig nie mogą służyć do konfigurowania starszej analizy, podczas gdy zestawy reguł mogą.

Analiza kodu w kompilacjach ciągłej integracji

Czy analiza kodu oparta na platformie .NET działa w kompilacjach ciągłej integracji?

Tak. W przypadku analizatorów zainstalowanych z pakietu NuGet te reguły są wymuszane w czasie kompilacji, w tym podczas kompilacji ciągłej integracji. Analizatory używane w kompilacji ciągłej integracji szanują konfigurację reguł zarówno z zestawów reguł, jak i plików EditorConfig. Obecnie analizatory kodu wbudowane w program Visual Studio nie są dostępne jako pakiet NuGet, więc te reguły nie są wymuszane w kompilacji ciągłej integracji.

Analizatory IDE a StyleCop

Jaka jest różnica między analizatorami kodu IDE programu Visual Studio i analizatorami StyleCop?

Środowisko IDE programu Visual Studio zawiera wbudowane analizatory, które szukają zarówno problemów ze stylem kodu, jak i jakością. Te reguły ułatwiają korzystanie z nowych funkcji językowych w miarę ich wprowadzania i poprawiania możliwości utrzymania kodu. Analizatory IDE są stale aktualizowane przy użyciu każdej wersji programu Visual Studio.

Analizatory StyleCop są analizatorami innych firm zainstalowanymi jako pakiet NuGet, który sprawdza spójność stylu w kodzie. Ogólnie rzecz biorąc, reguły StyleCop umożliwiają ustawianie osobistych preferencji dla bazy kodu bez zalecania jednego stylu na inny.

Analizatory kodu a starsza analiza

Jaka jest różnica między starszą analizą a analizą kodu opartą na platformie .NET?

Analiza kodu oparta na platformie .NET analizuje kod źródłowy w czasie rzeczywistym i podczas kompilacji, natomiast starsza analiza analizuje pliki binarne po zakończeniu kompilacji. Aby uzyskać więcej informacji, zobacz Analiza oparta na platformie .NET kompilatora i starsza analiza.

Analizatory FxCop a analizatory platformy .NET

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.FxCopAnalyzerspakiet 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.NetAnalyzerspakiet NuGet. Rozważ migrację z analizatorów FxCop do analizatorów platformy .NET.

Traktuj ostrzeżenia jako błędy

Mój projekt używa opcji kompilacji, aby traktować ostrzeżenia jako błędy. Po przeprowadzeniu migracji ze starszej analizy do analizy kodu źródłowego wszystkie ostrzeżenia analizy kodu są teraz wyświetlane jako błędy. Jak mogę temu zapobiec?

Aby zapobiec traktowaniu ostrzeżeń analizy kodu jako błędów, wykonaj następujące kroki:

  1. Utwórz plik props o następującej zawartości:

    <Project>
       <PropertyGroup>
          <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
       </PropertyGroup>
    </Project>
    
  2. Dodaj wiersz do pliku projektu csproj lub vbproj, aby zaimportować plik props utworzony w poprzednim kroku. Ten wiersz należy umieścić przed wszystkimi wierszami, które importuje pliki .props analizatora. Jeśli na przykład plik .props ma nazwę codeanalysis.props:

    ...
    <Import Project="..\..\codeanalysis.props" Condition="Exists('..\..\codeanalysis.props')" />
    <Import Project="..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props')" />
    ...
    

Strona właściwości rozwiązania do analizy kodu

Gdzie znajduje się strona właściwości Analiza kodu dla rozwiązania?

Strona właściwości Analiza kodu na poziomie rozwiązania została usunięta na rzecz bardziej niezawodnej grupy właściwości udostępnionych. W przypadku zarządzania analizą kodu na poziomie projektu strona właściwości Analiza kodu jest nadal dostępna. (W przypadku projektów zarządzanych zalecamy również migrację z zestawów reguł do pliku EditorConfig w celu skonfigurowania reguły). W przypadku zestawów reguł udostępniania w wielu/wszystkich projektach w rozwiązaniu lub repozytorium zalecamy zdefiniowanie grupy właściwości za pomocą właściwości CodeAnalysisRuleSet w udostępnionym pliku props/targets lub pliku Directory.props/Directory.targets . Jeśli nie masz żadnych typowych rekwizytów ani obiektów docelowych importowanych przez wszystkie projekty, rozważ dodanie takiej grupy właściwości do pliku Directory.props lub Directory.targets w katalogu rozwiązania najwyższego poziomu, który jest automatycznie importowany we wszystkich plikach projektu zdefiniowanych w katalogu lub jego podkatalogach.