提问人:user3797758 提问时间:11/3/2022 最后编辑:user3797758 更新时间:11/11/2022 访问量:205
如何向生成的类中的 C# 源代码生成错误添加位置提示?
How do I add location hints to C# source generation errors in generated classes?
问:
我有一个 C# 源代码生成器,它可能会在读取的数据中遇到配置问题,这些问题会作为编译错误发出。目前,这看起来像这样:
DiagnosticDescriptor errorType = new DiagnosticDescriptor(...);
Location? fileLocation = null;
context.ReportDiagnostic(Diagnostic.Create(errorType, fileLocation, DiagnosticSeverity.Error));
这会正确地引发错误,但不会指向有用的位置(单击或以其他方式检查错误时)。我知道生成的文本中存在错误的区域,我想突出显示,但我无法显示错误,因为此时新源代码是.string
方法似乎对动态类没有帮助:Create
Location
Create(SyntaxTree syntaxTree, TextSpan textSpan)
-syntaxTree
不存在,因为在源生成器完成运行之前不会解析源生成的文本。Create(string filePath, TextSpan textSpan, LineositionSpan lineSpan)
-filePath
不存在,因为这是一个生成的文件,而不是在磁盘上找到的东西(我知道它们在某个时候被写出来,但据我所知,我们无法获得该数据)
如何为源生成错误添加提示?Location
答:
1赞
Jason Malinowski
11/11/2022
#1
这里的期望是,您不应该对生成的代码提供诊断,而应该首先对在执行生成时读入的代码进行诊断。假设生成的代码中的任何错误都更有可能表明生成器中存在错误,而不是原始代码中的错误。
评论
0赞
Patrick Beynio
11/18/2022
“而是对你在进行生成时读入的代码进行诊断”哦,太酷了,这将如何工作?
0赞
Jason Malinowski
11/19/2022
您可以针对用作生成源的任何代码报告生成器中的诊断。即属性有问题吗?针对该属性进行报告。
下一个:在分析错误时阻止错误报告
评论