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
相关产品推荐
相关产品推荐

