簡體   English   中英

面向 .NET Framework 的 SDK 樣式項目中的 FXCOP 輸出中缺少文件名和行號

[英]File names and line numbers missing from FXCOP output in SDK-style project targeting .NET Framework

我們在解決方案中大量使用了 FXCOP 代碼分析(“舊版”)。 我們正在啟用許多 Microsoft 規則,並且還針對我們想要檢查的代碼方面編寫了大量我們自己的 FXCOP 樣式分析器。 在針對各種 .NET Framework 版本(當前為 4.7.2)的“舊”風格 Visual Studio C# 項目中,這一切都運行良好。

然而,當同一個項目被移植到新的“SDK 風格”格式,並通過 net472 以 .NET Framework 4.7.2 為目標,並且我們通過添加 true 來啟用代碼分析時,我們遇到了問題。 我們自定義的 FXCOP 規則似乎仍然可以正常工作並輸出警告,但在錯誤列表窗口中,“文件”列下沒有文件名,“行”列下始終有第 1 行。 因此,我們可以看到警告消息,但是無法雙擊警告並找出與警告相關的源代碼中的位置——這使得整個代碼分析毫無用處。 當我切換到“輸出/構建”窗口時,我還可以逐行看到那里的警告,但這里也缺少文件名/行號信息。

我知道以下事實:

  • Microsoft 已將許多或所有 FXCOP 規則移植到 Roslyn(“.NET 分析器”),現在可以/應該使用它們。 但是我需要使用我們自己的規則,而不僅僅是微軟的規則。 從長遠來看,將我們的規則重寫為 Roslyn 可能是正確的解決方案,但從短期或中期來看,這將是一項艱巨的任務。

  • VS 中的 .NET Core 和 .NET Standard 項目不支持 FXCOP(舊版)分析(根據https://docs.microsoft.com/en-us/visualstudio/code-quality/static-code-analysis-for -managed-code-overview?view=vs-2022 )。 但是,如上所述,我的項目不適用於 .NET Core 或 .NET Standard。 它適用於 .NET Framework 4.7.2 - 問題似乎在於它是 SDK 樣式。 我需要這種格式的原因是因為它是我將用來移植到 .NET Core/.NET 6+ 的格式。

我找到了該問題的部分解決方案。 FxCopCmd(由它使用)不發出文件名和行號的原因是因為默認情況下,在 SDK 樣式的項目中,PDB 文件格式設置為可移植。 FxCopCmd 不理解便攜式 PDB。 解決方案是在 Visual Studio 項目屬性中,將“調試符號”設置為“PDB 文件,當前平台”。 .csproj 文件中對應的設置是

 <DebugType>full</DebugType>

進行此更改后,文件名和行號會出現在文本輸出中,以及它們在錯誤列表中的列中,並且可以單擊輸出或錯誤列表中的警告,您將被帶到正確的位置來源。

什么還不起作用:錯誤列表中的“抑制...”上下文菜單命令仍然沒有出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM