舊版 FxCop 與 .NET 分析器的相關常見問題

舊版 FxCop (二進位分析) 與 .NET 分析器 (來源分析) 之間的差異,可能有點令人難以理解。 本文旨在解決您可能會遇到的一些問題。

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

舊版 FxCop 會對已編譯的組件執行建置後分析。 它會作為獨立可執行檔 FxCopCmd.exe 來執行。 FxCopCmd.exe 會載入已編譯的組件、執行程式碼分析,然後回報結果 (或「診斷」)。

.NET 分析器是以 .NET Compiler Platform ("Roslyn") 為基礎。 您可以從 .NET SDK 啟用分析器,或將其安裝為 NuGet 套件,以供專案或解決方案參考。 在編譯器執行期間,分析器會執行以原始程式碼為基礎的分析。 分析器是裝載於編譯器處理序 csc.exevbc.exe 內,並在建置專案時執行分析。 分析器結果會與編譯器結果一併回報。

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 分析器

[執行程式碼分析] 命令是否會執行 .NET 分析器?

在 Visual Studio 2019 16.5 版本之前,當您選取 [分析]>[執行程式碼分析] 時,會執行舊版分析。 從 Visual Studio 2019 16.5 開始,[執行程式碼分析] 功能表選項會針對選取的專案或解決方案執行 Roslyn 分析器。 如果您已安裝 .NET 分析器,則也會加以執行。 如需詳細資訊,請參閱如何:對受控程式碼手動執行程式碼分析

RunCodeAnalysis msbuild 專案屬性是否會執行分析器?

否。 專案檔中的 RunCodeAnalysis 屬性 (例如 .csproj) 只會用來執行舊版 FxCop。 它會執行建置後 msbuild 工作,以叫用 FxCopCmd.exe

那麼要如何執行 .NET 分析器?

若要執行 .NET 分析器,請先從 .NET SDK 啟用分析器,或將其安裝為 NuGet 套件。 然後從 Visual Studio 或使用 msbuild 建置您的專案或方案。 Roslyn 分析器產生的警告和錯誤會出現在 [錯誤清單] 或命令視窗中。

即使我安裝了 .NET 分析器 NuGet 套件,仍會收到警告 CA0507

如果已經安裝了 .NET 分析器但仍然收到警告 CA0507 [執行程式碼分析] 已淘汰,請改為使用組建期間執行的 FxCop 分析器,則可能需要將專案檔中的 RunCodeAnalysis msbuild 屬性設為 false。 否則,舊版分析將在每次建置之後執行。

<RunCodeAnalysis>false</RunCodeAnalysis>

哪些規則已移植至 .NET 分析器?

如需哪些舊版分析規則已移植至 .NET 分析器的資訊,請參閱 Fxcop 規則移植狀態

將程式碼分析警告視為錯誤

如果專案使用組建選項將警告視為錯誤,則分析器警告可能會顯示為錯誤。 若要避免將程式碼分析警告視為錯誤,請遵循程式碼分析常見問題的步驟。

另請參閱