Visual Studio 中程式碼分析的常見問題集

此頁面包含有關 Visual Studio 中 .NET Compiler Platform 型程式碼分析的一些常見問題的解答。

程式碼分析與 EditorConfig

我應該使用程式碼分析或 EditorConfig 來檢查程式碼樣式嗎?

程式碼分析和 EditorConfig 檔案會配合運作。 當您在 EditorConfig 檔案中文字編輯器 [選項] 頁面上定義程式碼樣式時,實際上就是在設定 Visual Studio 中內建的程式碼分析器。 EditorConfig 檔案可用來啟用或停用分析器規則,以及設定 NuGet 分析器套件。

EditorConfig 與規則集

我應該使用規則集或 EditorConfig 檔案來設定分析器?

規則集和 EditorConfig 檔案可以共存,而且兩者都可用來設定分析器。 EditorConfig 檔案和規則集都可讓您啟用和停用規則,並設定其嚴重性。

不過,EditorConfig 檔案也提供其他方法來設定規則:

除了規則集和 EditorConfig 檔案之外,某些分析器還透過使用標示為 C# 和 VB 編譯器其他檔案的文字檔來設定。

注意

  • EditorConfig 檔案只能用來啟用規則,並在 Visual Studio 2019 版本 16.3 和更新版本中設定其嚴重性。
  • EditorConfig 檔案無法用來設定舊版分析,而規則集則可以。

持續整合 (CI) 組建的程式碼分析

.NET Compiler Platform 型程式碼分析是否可在持續整合 (CI) 組建中運作?

是。 針對從 NuGet 套件安裝的分析器,這些規則會在建置期間強制執行,包括在 CI 建置期間。 CI 組建中使用的分析器會遵守規則集和 EditorConfig 檔案的規則組態。 目前,Visual Studio 內建的程式碼分析器無法作為 NuGet 套件使用,因此這些規則無法在 CI 組建中強制執行。

IDE 分析器與 StyleCop

Visual Studio IDE 程式碼分析器與 StyleCop 分析器之間的差異為何?

Visual Studio IDE 包含內建分析器,可尋找程式碼樣式和品質問題。 這些規則可協助您在推出新語言功能時加以使用,並改善程式碼的可維護性。 IDE 分析器會隨著每個 Visual Studio 版本持續更新。

StyleCop 分析器是以 NuGet 套件形式安裝的第三方分析器,可檢查程式碼中的樣式一致性。 一般而言,StyleCop 規則可讓您設定程式碼基底的個人喜好設定,而不需要逐樣式建議。

程式碼分析器與舊版分析

舊版分析與 .NET Compiler Platform 型程式碼分析之間有何差異?

.NET Compiler Platform 型程式碼分析會即時和在編譯期間分析原始程式碼,而舊版分析會在建置完成後分析二進位檔案。 如需詳細資訊,請參閱 .NET Compiler Platform 型分析與舊版分析

FxCop 分析器與 .NET 分析器

FxCop 分析器與 .NET 分析器之間有何差異?

FxCop 分析器和 .NET 分析器皆指 FxCop CA 規則的 .NET Compiler Platform ("Roslyn") 分析器實作。 在 Visual Studio 2019 16.8 和 .NET 5.0 之前,這些分析器會作為 Microsoft.CodeAnalysis.FxCopAnalyzersNuGet 套件提供。 從 Visual Studio 2019 16.8 和 .NET 5.0 開始,.NET SDK 中隨附這些分析器。 其也可作為 Microsoft.CodeAnalysis.NetAnalyzersNuGet 套件提供。 請考慮從 FxCop 分析器移轉至 .NET 分析器

將警告視為錯誤

我的專案會使用建置選項來將警告視為錯誤。 從舊版分析移轉至原始程式碼分析之後,所有程式碼分析警告現在都會顯示為錯誤。 如何防止這一點?

若要避免程式碼分析警告被視為錯誤,請遵循下列步驟:

  1. 使用下列內容建立 .props 檔案:

    <Project>
       <PropertyGroup>
          <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
       </PropertyGroup>
    </Project>
    
  2. 將一行加入至您的 .csproj 或 .vbproj 專案檔,以匯入您在上一個步驟中建立的 .props 檔案。 此行必須放在匯入分析器 .props 檔案的任何行之前。 例如,如果您的 .props 檔案名為 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')" />
    ...
    

程式碼分析方案屬性頁

方案的程式碼分析屬性頁在哪裡?

已移除方案層級的程式碼分析屬性頁,以利於更可靠的共用屬性群組。 若要在專案層級管理程式碼分析,仍可以使用程式碼分析屬性頁。 (針對受控專案,我們也建議從規則集移轉至 EditorConfig 以進行規則設定。)若要在方案或存放庫中跨多個/所有專案共用規則集,建議您在共用 props/targets 檔案或 Directory.props/Directory.targets 檔案中使用 CodeAnalysisRuleSet 屬性來定義屬性群組。 如果您沒有所有專案匯入的任何這類通用 props 或目標,您應該考慮將這類屬性群組新增至最上層方案目錄中的 Directory.props 或 Directory.targets 檔案,其會自動匯入目錄中定義的所有專案檔或其子目錄中。