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

Roslyn Source Generator调试正常但被引用时标记‘Ignored’无法生效

Roslyn Source Generator 被标记为“Ignored”无输出的排查与解决

可能的原因及对应解决方案

1. 项目引用方式不正确

普通项目引用不会自动将生成器注册为编译器分析器,需要修改引用项目的.csproj文件,在<ProjectReference>节点中添加两个关键属性:

<ProjectReference Include="..\CompetencesSourceGenerator\CompetencesSourceGenerator.csproj">
  <OutputItemType>Analyzer</OutputItemType>
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
  • OutputItemType="Analyzer":告知编译器该引用是源代码生成器/分析器
  • ReferenceOutputAssembly="false":避免引用项目直接依赖生成器程序集(生成器仅在编译阶段运行,无需运行时依赖)

2. 生成器项目的NuGet包配置错误

在生成器项目的.csproj中,需确保Microsoft.CodeAnalysis.CSharp和Microsoft.CodeAnalysis.Analyzers的引用设置PrivateAssets="all",防止这些包被传递到引用项目引发冲突:

<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="最新版本" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="最新版本" PrivateAssets="all" />

3. 基类CompetenceGeneratorBase存在问题

检查基类是否正确实现ISourceGenerator接口:

  • 若基类为抽象类,子类需自行标记[Generator]特性(或确保基类已标记)
  • 确认基类的Initialize方法(若有)未抛出异常,否则会导致生成器初始化失败被编译器忽略

4. 缓存或构建状态异常

清理解决方案并重新生成:删除生成器项目和引用项目的bin、obj目录,重新构建,避免旧缓存导致的加载异常。

验证方法

修改生成器代码添加初始化日志(调试用),确认生成器是否被加载:

public override void Initialize(GeneratorInitializationContext context)
{
    // 若基类未实现Initialize则添加此方法
    System.Diagnostics.Debug.WriteLine("CompetenceNamesGenerator 已初始化");
}

重新构建后,查看输出窗口的“Build”日志,搜索生成器名称确认是否被正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:50:23