Visual Studio 在VS 2022中使用StyleCop向C#项目添加自定义规则

tpgth1q7  于 2023-10-23  发布在  C#
关注(0)|答案(1)|浏览(319)

我似乎找不到一个很好的教程来添加一些在StyleCop x1c 0d1x中还不能自定义的自定义样式规则
例如,创建一个规则来检查循环或控制流语句中的N级嵌套块,例如具有3级深度的嵌套代码:


我发现了一个使用VS 2008 https://subscription.packtpub.com/book/programming/9781782169543/1/ch01lvl1sec16/creating+custom+rules+(intermediate)的旧教程,但我相信现在不可能以类似的方式做到这一点,而且我在文档https://github.com/DotNetAnalyzers/StyleCopAnalyzers中找不到任何相关内容。我在.NET Core 6 C#项目中使用Visual Studio 2022和上面提到的包。如果你能分享一些关于这方面的见解,我将不胜感激。谢谢,提前!
我试过参考这些教程,但我相信它们不适用于当前的VS 2022安装与.Net 6
https://subscription.packtpub.com/book/programming/9781782169543/1/ch01lvl1sec16/creating+custom+rules+(intermediate)
https://www.planetgeek.ch/2009/07/19/custom-stylecop-rules-2/

eqqqjvef

eqqqjvef1#

我似乎找不到一个很好的教程来添加一些在StyleCop中还不能自定义的自定义样式规则
这是因为StyleCop.Analyzers包是不可扩展的(即 * 你不能 *):
https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/2265

  • 酒店:有没有一种方法可以在C#中创建自定义规则?
  • :StyleCop Analyzers不提供任何基础设施来帮助开发自定义规则。然而,它实际上并不需要这样做,因为编译器已经这样做了。自定义规则具有附加的独立分析器包的形式。您可以在项目中安装任意数量的基于Roslyn的分析器包,以获得所需的完整分析。

但不要气馁:你很难找到相关信息,因为你正在专门搜索 “StyleCop”,但StyleCop(如,the original name for the original tooling from 2005-2012)来自 * 之前 * Roslyn被引入,今天完全过时了。相反,搜索“roslyn”而不是“stylecop”,你会得到相关的结果。
所以你实际上想做的是写一个**Roslyn* 语法分析器 *,它检查.cs文件的语法树结构,which is documented here-和here is a quickstart/sample/template project for creating a custom syntax analyzerpermalink)。这是今天仍然适用的a random guide I found

  • 除非您想使用StyleCop.Analyzers包中的任何规则,否则应该删除该包引用。
  • 相反,添加一个NuGet引用到Microsoft.CodeAnalysis.CSharp.Workspaces(这反过来将传递引用您需要的其他Microsoft.CodeAnalysis.*包)。
  • 使用SyntaxTree tree = CSharpSyntaxTree.ParseText( await File.ReadAllTextAsync( "FizzBuzz.cs" ) ); CompilationUnitSyntax root = tree.GetCompilationUnitRoot();加载您的.cs文件
  • 检查root.DescendantNodes是否有您感兴趣的Syntax子类型、such as if statements或特定的关键字和标记。
  • 使用[DiagnosticAnalyzerAttribute]将警告报告回编译器
  • .虽然我还不确定如何通过.editorconfig配置分析器。如果我发现了,我会编辑这个答案。

相关问题