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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:24:56