IntelliSense给出错误,因为它忽略(看不到)源代码生成器生成的源代码,尽管生成没有给出错误。我已经尝试构建/重建多次。生成的源代码是存在的,好的,我可以导航到他们与ctrl +单击,也没有构建错误。红色下划线和智能感知错误仍然存在...
问题
我错过了什么?
mwecs4sa1#
让我澄清一下@汉斯·凯斯汀的评论,因为我最近走上了这条令人沮丧的道路:这里通常涉及 * 多个 * 缓存。一个问题是Visual Studio不允许分析器程序集在加载后卸载。一旦Visual Studio加载了您的分析器以在IDE和Intellisense中使用,它将一直使用该版本,直到您关闭Visual Studio,或者至少直到您增加程序集版本。但是,当您点击项目的生成/重新生成时,Visual Studio将生成一个新的msbuild进程,该进程将(通常)加载一个新版本的分析器。因此,您可能最终得到一个构建良好但没有更新IDE和Intellisense的项目。另一个缓存问题与IIncrementalGenerator的增量构建有关。如果操作正确,此较新版本的源代码生成器将缓存最后一次执行,并在相关内容没有更改的情况下为IDE/Intellisense * 重用输出。这通常需要为源代码语法节点的 * 内容 * 实现自定义等式比较器。但是,如果该比较未能考虑相关内容(即最后一次按键时实际更改的内容),发生器将不会执行,IDE/Intellisense也不会更新。同样,* * msbuild**可能仍然运行良好,因为每个新构建都忽略任何以前的输出缓存,并且从一开始就为分析器提供每个源节点。
IIncrementalGenerator
1条答案
按热度按时间mwecs4sa1#
让我澄清一下@汉斯·凯斯汀的评论,因为我最近走上了这条令人沮丧的道路:
这里通常涉及 * 多个 * 缓存。
一个问题是Visual Studio不允许分析器程序集在加载后卸载。一旦Visual Studio加载了您的分析器以在IDE和Intellisense中使用,它将一直使用该版本,直到您关闭Visual Studio,或者至少直到您增加程序集版本。但是,当您点击项目的生成/重新生成时,Visual Studio将生成一个新的msbuild进程,该进程将(通常)加载一个新版本的分析器。因此,您可能最终得到一个构建良好但没有更新IDE和Intellisense的项目。
另一个缓存问题与
IIncrementalGenerator
的增量构建有关。如果操作正确,此较新版本的源代码生成器将缓存最后一次执行,并在相关内容没有更改的情况下为IDE/Intellisense * 重用输出。这通常需要为源代码语法节点的 * 内容 * 实现自定义等式比较器。但是,如果该比较未能考虑相关内容(即最后一次按键时实际更改的内容),发生器将不会执行,IDE/Intellisense也不会更新。同样,* * msbuild**可能仍然运行良好,因为每个新构建都忽略任何以前的输出缓存,并且从一开始就为分析器提供每个源节点。