共用方式為


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

本頁包含 Visual Studio 中 .NET 編譯器平臺型程式碼分析的一些常見問題解答。

程式碼分析與 EditorConfig

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

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

EditorConfig 與規則集

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

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

不過,在 Visual Studio 2019 16.5 版和更新版本中,規則集檔案已被取代,取而代之的是 EditorConfig 檔案,而且 .NET Core 和 .NET 5+ 專案不支援所有規則集功能表命令。 如需詳細資訊,請參閱 將現有的規則集檔案轉換為 EditorConfig 檔案

EditorConfig 檔案提供其他設定規則的方法:

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

備註

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

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

.NET 編譯器平臺型程式碼分析是否適用於持續整合 (CI) 組建?

是的。 對於使用 .NET SDK 5.0 或更新版本安裝的分析器,或從 NuGet 套件安裝的分析器,這些規則會在 建置時強制執行,包括在 CI 建置期間。 CI 組建中使用的分析器會遵循規則集和 EditorConfig 檔案的規則設定。 從 .NET 5.0 開始,內建於 Visual Studio 中的程式碼樣式分析器也會包含在 .NET SDK 中,而且大部分都可以在 CI 組建中強制執行。 如需詳細資訊,請參閱 在建置時啟用

IDE 分析器與 StyleCop

Visual Studio IDE 程式碼分析器和 StyleCop 分析器之間有何差異?

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

StyleCop 分析器 是安裝為 NuGet 套件的第三方分析器,可檢查程式碼中的樣式一致性。 一般來說,StyleCop 規則允許您為代碼庫設置個人偏好,而無需推薦一種樣式而不是另一種樣式。

程式碼分析器與舊版分析

舊版分析與 .NET 編譯器平臺型程式碼分析之間有何差異?

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

FxCop 分析器與 .NET 分析器

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

FxCop 分析器和 .NET 分析器都是參考 FxCop CA 規則的 .NET 編譯器平台 (“Roslyn”) 分析器實作。 在 Visual Studio 2019 16.8 和 .NET 5.0 之前,這些分析器會隨附為 Microsoft.CodeAnalysis.FxCopAnalyzersNuGet 套件。 從 Visual Studio 2019 16.8 和 .NET 5.0 開始,這些分析器會 包含在 .NET SDK 中。 它們也可以作為 NuGet 套件使用Microsoft.CodeAnalysis.NetAnalyzers。 請考慮 從 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 檔案 ,這些檔案會自動匯入目錄或其子目錄中定義的所有專案檔案中。