(已解决)Roslyn 诊断分析器上下文节点位置超出文件末尾

问题描述 投票:0回答:1

我开发了我的第一个诊断分析器,并通过 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 错误。

c# roslyn roslyn-code-analysis
1个回答
1
投票

该位置是“基于跨度”的,即,它位于从文件开头算起的字符索引 275 处。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.