Visual Studio需重启才能识别Source Generator文件问题求助
解决Source Generator修改后需重启VS才能生效的问题
核心原因
Source Generator属于Roslyn分析器范畴,若引用方式不规范或VS编译缓存未及时刷新,会导致修改后的生成器无法在重建时被加载,必须重启VS才能更新。
可行解决方案
1. 修正消费项目对生成器的引用配置
确保消费项目通过项目引用正确识别生成器,避免VS缓存旧的生成器文件。在消费项目的.csproj中添加/修改如下配置:
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" PrivateAssets="all" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
PrivateAssets="all":防止生成器被传递引用到下游项目IncludeAssets明确包含analyzers:确保VS将该项目识别为代码生成器/分析器
2. 强制触发Roslyn重新加载生成器
完成引用修正后,按以下步骤操作:
- 清理解决方案:点击菜单「生成」→「清理解决方案」
- 单独重建生成器项目:右键生成器项目→「生成」
- 重建消费项目:右键消费项目→「生成」
- 手动触发代码分析:右键消费项目→「分析」→「重新运行代码分析」
3. 启用后台代码分析功能
确保VS的后台分析功能开启,保证生成器能实时响应代码变更:
- 打开「工具」→「选项」→「文本编辑器」→「C#」→「高级」
- 勾选「在后台运行代码分析」选项
4. 用命令行绕开VS编译缓存
若VS增量编译缓存仍存在问题,使用dotnet命令行执行编译:
dotnet clean dotnet build
执行完成后回到VS,生成的代码应已更新。
5. 验证生成器是否实际执行
在生成器的Execute方法中添加诊断日志,确认修改后的生成器是否被触发:
public void Execute(GeneratorExecutionContext context) { // 添加诊断日志,用于验证执行状态 context.ReportDiagnostic(Diagnostic.Create( new DiagnosticDescriptor( "GEN001", "Generator Execution Log", "Generator ran at {0}", "Source Generator", DiagnosticSeverity.Info, isEnabledByDefault: true), Location.None, DateTime.Now.ToString("F"))); context.AddSource("test.g.cs", $"// {DateTime.Now:F}"); }
打开VS「输出」窗口,切换到「代码分析」频道,若能看到最新的时间日志,说明生成器已正常执行,此时刷新消费项目的代码文件即可看到新生成内容。
内容的提问来源于stack exchange,提问作者aybe
相关产品推荐
相关产品推荐

