Cla*_*pel 6 c# code-generation visual-studio sourcegenerators
我正在尝试使用C# 源生成器。我花了大约一天的时间,我发现这是一次非常令人沮丧和痛苦的经历。IntelliSense 极其不可靠。它偶尔会起作用,但大多数情况下不会起作用,而且我无法找出任何系统。(重新启动 Visual Studio 没有帮助。)
但更根本的是,我在调试生成的代码中的错误时遇到了很大的麻烦。当我在源生成器中的模板中犯错误并尝试编译时,我可能会在生成的文件中收到诸如“方法必须有返回类型”之类的错误。但是当我双击错误时,它不会将我带到生成的代码。这使得很难看出它出了什么问题。
有什么窍门吗?当编译失败时,有什么方法可以检查生成的代码吗?更一般地说,生成的代码何时可用于 IntelliSense,何时不可用,由什么决定?
我使用的是 Visual Studio Professional 2022 版本 17.1.6 和 ReSharper 2022.1。
提前致谢!
我已经找到了解决我的问题的部分方法。
首先,使用源生成器时不要在 Visual Studio 中使用 ReSharper 生成器。它不会给出正确的错误消息。相反,dotnet build从命令行运行。这样你会得到更好的错误消息。
事实上,我的部分问题可能是由于 ReSharper 中的错误或限制造成的(尽管我还没有调查过这一点,所以这纯粹是猜测)。
其次,您可以测试源代码生成器的内部结构,而无需在编译时运行源代码生成。
OutputItemType="Analyzer"在项目引用中使用。此外,正如 NightOwl888 指出的那样,我可以将其添加到引用项目中,以便让它将生成的文件吐出到磁盘( 如本文所述):
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我还没有解决 IntelliSense 问题,但现在我至少可以忍受使用这个生成器。