如何向生成的类中的 C# 源代码生成错误添加位置提示?

How do I add location hints to C# source generation errors in generated classes?

提问人:user3797758 提问时间:11/3/2022 最后编辑:user3797758 更新时间:11/11/2022 访问量:205

问:

我有一个 C# 源代码生成器,它可能会在读取的数据中遇到配置问题,这些问题会作为编译错误发出。目前,这看起来像这样:

DiagnosticDescriptor errorType = new DiagnosticDescriptor(...);
Location? fileLocation = null;

context.ReportDiagnostic(Diagnostic.Create(errorType, fileLocation, DiagnosticSeverity.Error));

这会正确地引发错误,但不会指向有用的位置(单击或以其他方式检查错误时)。我知道生成的文本中存在错误的区域,我想突出显示,但我无法显示错误,因为此时新源代码是.string

方法似乎对动态类没有帮助:CreateLocation

  • Create(SyntaxTree syntaxTree, TextSpan textSpan) - syntaxTree不存在,因为在源生成器完成运行之前不会解析源生成的文本。
  • Create(string filePath, TextSpan textSpan, LineositionSpan lineSpan) - filePath不存在,因为这是一个生成的文件,而不是在磁盘上找到的东西(我知道它们在某个时候被写出来,但据我所知,我们无法获得该数据)

如何为源生成错误添加提示?Location

C# Roslyn 错误报告 源生成器 csharp-source-generator

评论

0赞 Patrick Beynio 11/4/2022
如果我没记错的话,你必须为此安装一个单独的普通分析仪。但是,您应该能够将分析器与生成器放在同一个项目中,并在它们之间共享代码

答:

1赞 Jason Malinowski 11/11/2022 #1

这里的期望是,您不应该对生成的代码提供诊断,而应该首先对在执行生成时读入的代码进行诊断。假设生成的代码中的任何错误都更有可能表明生成器中存在错误,而不是原始代码中的错误。

评论

0赞 Patrick Beynio 11/18/2022
“而是对你在进行生成时读入的代码进行诊断”哦,太酷了,这将如何工作?
0赞 Jason Malinowski 11/19/2022
您可以针对用作生成源的任何代码报告生成器中的诊断。即属性有问题吗?针对该属性进行报告。