在 StyleCop 分析器中配置排序规则以强制执行用户定义的成员顺序

Configure ordering rule in StyleCop Analyzers to enforce user-defined member order

是否可以配置 StyleCop 分析器,以便检查 class 中成员的 "my" 顺序(与 SA1201 描述的不同)?也就是说,我希望我的属性位于构造函数之上,而 SA1201 要求它们位于构造函数之下。我不想禁用排序规则,因为我确实想坚持检查订单。

下面只是介绍了基本的想法,但真正应该考虑看看 StyleCop-Analyzers 做了什么。

使用 Analyzer with Code Fix (NuGet + VSIX) 项目模板,我想出了一个分析器的初稿,它能够检测何时将属性放在方法之后。 DiagnosticAnalyzer.cs文件中的静态AnalyzeSymbol方法(在项目创建时生成)的实现是:

private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
  var members = namedTypeSymbol.GetMembers();
  var methods = from m in members
                where (m.Kind == SymbolKind.Method && 
                  !m.IsImplicitlyDeclared && m.CanBeReferencedByName)
                select m;

  var properties = from m in members
                   where m.Kind == SymbolKind.Property
                   select m;

  foreach (var p in properties)
  {
    foreach (var m in methods)
    {
      if (p.Locations.First().SourceSpan.Start > m.Locations.First().SourceSpan.Start)
      {
         // For all such symbols, produce a diagnostic.
         var diagnostic = Diagnostic.Create(Rule, m.Locations[0], m.Name);
         context.ReportDiagnostic(diagnostic);
      }
    }
  }
}