You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2022中Source generator无法被编辑器正常识别

问题描述
  • 正在开发一款C# Source Generator,用于自动生成JsonObject类,实现JSON到运行时对象的转换逻辑
  • 代码编辑区对生成的类型标红色波浪线,报CS0246找不到类型的错误,但项目可以无报错完成构建,说明Source Generator本身的生成逻辑运行正常
  • 解决方案资源管理器的分析器节点提示 "This generator is not generating files.",和实际成功生成代码的情况不符

编辑器CS0246报错截图
解决方案资源管理器生成器提示截图

解决方法

按以下顺序排查即可解决问题:

  • 先检查Source Generator的项目引用配置
    消费端项目添加Generator引用时,必须配置两个核心属性,缺任何一个都会导致编辑器不会在设计时加载生成器,仅在正式构建时执行生成逻辑。正确的ProjectReference写法如下:
    <ProjectReference Include="..\你的SourceGenerator项目相对路径.csproj"
                      OutputItemType="Analyzer"
                      ReferenceOutputAssembly="false" />
    
    如果是通过NuGet包分发Generator,要确认打包时把生成器dll放到了analyzers/dotnet/cs目录下,不要放到普通的lib目录,否则VS不会将其识别为源生成器。
  • 清理VS本地缓存重新加载
    关闭所有Visual Studio进程,手动删除解决方案根目录下的隐藏.vs文件夹,同时删除所有相关项目的bin、obj目录,再重新打开解决方案触发完整还原和重载。
    尽量将Visual Studio升级到17.0及以上版本,16.x及更早版本对Source Generator的设计时生成支持存在大量已知缺陷,非常容易出现构建正常、智能提示失效的问题。
  • 调整生成器逻辑兼容设计时构建
    编辑器做智能提示时跑的是设计时构建,和正式构建的编译上下文有差异:
    • 不要在生成逻辑里加依赖正式构建参数的判断,比如判断输出路径、判断编译配置、判断发布版标识这类逻辑,设计时构建下这些参数为空,会直接导致生成逻辑跳过
    • 生成的代码必须语法完整,写全命名空间、类型访问修饰符,不要生成存在语法错误的片段,设计时编译对错误的容忍度远低于正式构建,有问题的生成代码会被编辑器直接丢弃
    • 优先实现IIncrementalGenerator接口做增量生成,旧版ISourceGenerator接口在设计时构建中经常被VS后台跳过执行,稳定性很差
    • 不要在生成器逻辑里抛出未捕获的异常,一旦抛出异常VS会直接静默禁用该生成器,不会弹出明显提示,但正式构建时因为进程重启,生成器又能正常运行
  • 验证修复结果
    配置和逻辑调整完成后,展开消费项目的「依赖项->分析器->你的生成器」节点,就能看到所有生成的C#文件,双击可直接查看生成内容,此时CS0246的红色波浪线会自动消失,"未生成文件"的提示也会同步清除。

内容的提问来源于stack exchange,提问作者martinrhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:36:39