roslyn-code-analysis - 分析器为编译单元创建多个诊断
问题描述
我正在编写一个 Roslyn 诊断程序来严格打开/关闭选项。由于每个文件只能有一个,因此我正在使用要检查的节点的编译:
context.RegisterSyntaxNodeAction(CompilationUnitCheck, SyntaxKind.CompilationUnit);
运行开发配置单元时,我看到错误列表窗格中显示了多个诊断信息,有时多达 3 个,但每个文件始终至少 2 个。它们显示相同的位置。可能是什么原因造成的,我能做些什么来解决它?
private void CompilationUnitCheck(SyntaxNodeAnalysisContext context)
{
var orgRoot = (CompilationUnitSyntax) context.Node;
var fileName = System.IO.Path.GetFileNameWithoutExtension(orgRoot.SyntaxTree.FilePath) ;
if ((fileName?.EndsWith("designer", StringComparison.CurrentCultureIgnoreCase)).GetValueOrDefault() ||
"Reference".Equals(fileName, StringComparison.CurrentCultureIgnoreCase))
{
return;
}
if (fileName != "TestFile") return;
var newErrors = fileName == "TestFile";
var location = orgRoot.GetLocation();
string strictMsg = null ?? "Off";
var diagnostic = Diagnostic.Create(Rule, location, strictMsg);
context.ReportDiagnostic(diagnostic);
}
我目前的解决方法是获取根的哈希码,并将其存储在静态列表中,如果它在列表中,我不再检查。
解决方案
推荐阅读
- javascript - 而循环在较高的输出期间挂起
- c++ - 如何使while循环在上升时保持递增
- material-ui - 如何访问主题工具栏断点属性?
- docker - 我可以在基于容器的 Azure 批处理池中使用 docker 卷吗
- javascript - 如何使用 performance.measureMemory() API 进行前端可观察性?
- powershell - 如何创建嵌套数组并在其中添加数组元素?
- formatting - 重置项目以具有一致的间距约定
- r - 重新排序数据框的行
- c# - 如何获得鼠标的圆角 x/z 位置以及某个 y 位置,然后在那里实例化一个对象?
- excel - 更改具有动态日期的工作表的名称