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));
            }
        }

我正在分析属性声明及其关联的属性。

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

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

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