译 | 使用Roslyn分析器高效编写更好的代码
原文:Mika Dumont
翻譯:汪宇杰
Roslyn 是 .NET 編譯器平臺,即使在運行代碼之前,它也能幫助您捕獲 Bug。例如內(nèi)置于 Visual Studio 中的Roslyn 拼寫檢查分析器。
假設(shè)您正在創(chuàng)建一個靜態(tài)方法,并將 static 單詞拼錯為 statc。在運行代碼之前,您將能夠看到此拼寫錯誤。因為 Roslyn 可以在鍵入代碼時生成警告,甚至在您完成行之前。換句話說,您不必編譯代碼之后才發(fā)現(xiàn)您犯了一個錯誤。
Roslyn 分析儀還可以通過 Visual Studio 燈泡圖標(biāo)顯示自動代碼修復(fù),從而允許您立即修復(fù)代碼。
但是,如果你能捕捉到更多的錯誤呢?
讓我向您介紹 Roslyn 分析器包。這些分析器集合提供了更詳細(xì)的分析,但隨 Visual Studio 默認(rèn)工具發(fā)布。要了解有關(guān)我們最喜歡的 Roslyn 分析儀的詳細(xì)信息,請訪問我們的 Roslyn 分析器 GitHub 倉庫。此倉庫包括仍然適用于現(xiàn)代軟件開發(fā)的 FxCop,但現(xiàn)在以基于 Roslyn 的現(xiàn)代代碼分析平臺為目標(biāo)。讓我們繼續(xù),安裝這個包,以提高工作效率,更快地編寫更好的代碼!
譯者注:Roslyn 分析器 https://github.com/dotnet/roslyn-analyzers
將 FxCop 分析器作為 NuGet 包安裝
假設(shè)您使用的是 Visual Studio 2017 15.8 或更高版本,請選擇最新版本的 Microsoft.CodeAnalysis.FxCopAnalyzers。
使用包管理器 UI 在 Visual Studio 中安裝包。
安裝包后,只需從解決方案資源管理器自定義分析器診斷。分析器節(jié)點將顯示在解決方案資源管理器中的"引用"或"依賴項"節(jié)點下。如果展開分析器,然后展開其中一個分析器程序集,則可以在程序集中看到所有診斷。
您可以在屬性窗口中查看診斷的屬性,包括其描述和默認(rèn)嚴(yán)重性。要查看屬性,請右鍵單擊規(guī)則并選擇"屬性",或選擇規(guī)則后按 Alt+Enter。
解決方案資源管理器中每個診斷項旁邊的圖標(biāo)對應(yīng)于您在編輯器中打開規(guī)則集時看到的圖標(biāo):
圓圈中的"i"表示信息
三角形中的"!" 表示警告
圓圈中的"x"表示嚴(yán)重
淺色背景上圓圈中的"i"表示隱藏的嚴(yán)重
圓圈中的"*"表示忽略的診斷
然后,可以從解決方案資源管理器設(shè)置規(guī)則集嚴(yán)重性。在解決方案資源管理器中,展開依賴項和分析器。展開包含要為其設(shè)置嚴(yán)重性的規(guī)則的程序集。右鍵單擊規(guī)則并選擇"設(shè)置規(guī)則集嚴(yán)重性",并在彈出的菜單中選擇一個嚴(yán)重性選項。
如果將規(guī)則嚴(yán)重性設(shè)置為警告,則會在代碼中收到該特定規(guī)則集的警告。
現(xiàn)在,您已經(jīng)了解了分析器的工作原理,您可以提高工作效率,更快地編寫更好的代碼!
Q&A問:此警告顯示在 Visual Studio 中:"運行代碼分析已棄用為 FxCop 分析器,該分析器在生成期間運行。請參閱https://aka.ms/fxcopanalyzers遷移到 FxCop 分析儀"。這是什么意思?
答:FxCop 是比 Roslyn 早近十年的代碼分析引擎。就像我們推進(jìn)編譯器(例如介紹 Roslyn)一樣,我們也在將代碼分析技術(shù)推進(jìn)到 Roslyn 平臺。由于它由 .NET 編譯器平臺提供支持,因此在鍵入代碼時,它可以在代碼中生成警告。換句話說,您不必并編譯代碼才能發(fā)現(xiàn)您犯了一個錯誤。
問:FxCop分析儀和舊版FxCop分析器有什么區(qū)別?
答:FxCop 分析器在編譯過程中實時分析源代碼,而舊版 FxCop 是靜態(tài)代碼分析,并在生成完成后分析二進(jìn)制文件。有關(guān)詳細(xì)信息,請參閱 Roslyn 分析器與靜態(tài)代碼分析(1)和 FxCop 分析器常見問題解答(2)。
問:我可以編寫自定義分析器嗎?
答:當(dāng)然可以!有關(guān)如何編寫分析器的文檔,請參閱此處(3)。
問:我應(yīng)該使用 Roslyn 分析器還是 .editorconfig 規(guī)范代碼樣式?
答:Roslyn 分析器和 .editorconfig 文件是齊頭并進(jìn)的。在 .editorconfig 文件或文本編輯器選項頁上定義代碼樣式時,實際上正在配置內(nèi)置于 Visual Studio 中的 Roslyn 分析器。
問:分析器在持續(xù)集成 (CI) 生成中工作嗎?
答:是的,分析器作為NuGet包可以 CI 中約束編譯。
問:在哪里可以請求更多分析器或報告錯誤?
答:您可以在 GitHub 上的 Roslyn 倉庫上請求更多分析器并報告 Bug。
譯者注:
(1)https://docs.microsoft.com/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2019#roslyn-analyzers-vs-static-code-analysis
(2) https://docs.microsoft.com/visualstudio/code-quality/fxcop-analyzers-faq?view=vs-2019
(3)https://docs.microsoft.com/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix
(4)https://github.com/dotnet/roslyn/issues
英文原文可點擊“閱讀原文”查看
總結(jié)
以上是生活随笔為你收集整理的译 | 使用Roslyn分析器高效编写更好的代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 3.0之深入源码理解
- 下一篇: 你必须知道的Docker镜像仓库的搭建