我开发了我的第一个诊断分析器,并通过 NuGet 将其安装到测试项目中。 一切正常,除了问题下没有显示红线。 我正在使用
context.Node.GetLocation()
,其中 context
是 SyntaxNodeAnalysisContext
。
我更新了诊断以在消息中写入位置,以便我可以尝试使用
context.ReportDiagnostic(Diagnostic.Create(DD_INVALID_PARAM_TYPE, location, methodSymbol.Name, location.ToString(), propertyType));
确定位置,我在错误窗口中看到该位置是 SourceFile(C:\..\..\..\Program.cs[275..276))
但 Program.cs 文件只有 27 行长。
这是目前所讨论的完整方法:
private static void AnalyzeParameters(SyntaxNodeAnalysisContext context, IMethodSymbol methodSymbol)
{
var parameters = methodSymbol.Parameters;
if (parameters.Length != 1)
{
context.ReportDiagnostic(Diagnostic.Create(DD_INVALID_PARAM_COUNT, context.Node.GetLocation(), methodSymbol.Name, parameters.Length));
return;
}
var propertyType = ((PropertyDeclarationSyntax)context.Node).Type.ToString();
var methodInputType = parameters.First().Type.ToString();
if (propertyType != methodInputType)
{
context.ReportDiagnostic(Diagnostic.Create(DD_INVALID_PARAM_TYPE, context.Node.GetLocation(), methodSymbol.Name, methodInputType, propertyType));
}
}
我正在分析属性声明及其关联的属性。
解决方案 事实证明,诊断没有问题。 相反,红色下划线被 ReSharper 隐藏。 为了让它们重新显示,我需要更新设置 ReSharper --> 选项 --> 环境 --> Visual Studio 功能 --> Visual Studio 代码分析 --> 取消选中仅隐藏那些重复 ReSharper 代码分析突出显示的 Visual Studio 曲线。 这是因为有问题的属性当前没有被任何代码引用,因此 ReSharper 正在报告与错误相同的属性的建议,并且此设置隐藏 VS 错误。
该位置是“基于跨度”的,即,它位于从文件开头算起的字符索引 275 处。