C#增量源代码生成器无法运行且调试断点不触发的问题求助
C#增量源代码生成器无法运行且调试断点不触发的问题求助
我正在开发一个增量源代码生成器,用来给现有接口自动添加扩展函数,但现在遇到了棘手的问题:项目能正常完成编译构建的全流程,可生成器似乎完全没在运行——不仅我在初始化方法里加的Debugger.Launch()和Debugger.Break()根本没触发调试器附加提示,连预期的生成代码文件夹里也空无一物。
先说明我的项目结构:包含一个目标项目(就是想要用生成器增强的项目),和一个单独的源代码生成器项目,以下是具体配置和代码:
目标项目的.csproj配置
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\Generated</CompilerGeneratedFilesOutputPath> </PropertyGroup> <!--NugetPackages--> <ItemGroup> <ProjectReference Include="..\..\SourceGeneration\SourceGenerator\SourceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/> </ItemGroup>
源代码生成器项目的.csproj配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <LangVersion>latest</LangVersion> <OutputItemType>Analyzer</OutputItemType> <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules> <IsRoslynComponent>true</IsRoslynComponent> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\Generated</CompilerGeneratedFilesOutputPath> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.13.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.13.0" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" PrivateAssets="all" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\SourceGeneratorShared\SourceGeneratorShared.csproj" /> </ItemGroup> </Project>
增量生成器核心代码
[Generator] public class InterfaceStuff : IIncrementalGenerator { public void Initialize(IncrementalGeneratorInitializationContext context) { Debugger.Launch(); Debugger.Break(); var provider = context.SyntaxProvider.CreateSyntaxProvider( predicate: static (node, _) => IsTargetClass(node), transform: static (ctx, _) => GetTargetInfo(ctx)) .Where(static info => info is not null).Collect(); context.RegisterSourceOutput(provider, (ctx, collected) => { foreach (var item in collected) { var source = GenerateSource(item!); ctx.AddSource($"{item.ClassName}.g.cs", SourceText.From(source, Encoding.UTF8)); } }); } }
已尝试的排查手段和补充细节
- 生成代码的文件夹已在预期路径创建,但内部无任何生成的
.cs文件 - 尝试过多种重建策略:修改两个项目代码后重建、清理整个解决方案再全量构建、提交代码后删除本地文件重新克隆构建,均无效果
- 确认当前运行模式为Debug模式
有没有大佬能帮我看看哪里出问题了?或者还需要什么额外的信息可以随时问我!
内容来源于stack exchange
相关产品推荐
相关产品推荐

