IntelliSense无法识别本地C#源生成器生成的代码
问题:Roslyn源生成器构建正常但IDE显示生成代码错误波浪线
我有一个包含4个项目的解决方案:
- Roslyn源生成器项目(目标框架为.NET Standard 2.0)
- 使用该生成器的类库项目
- 使用该生成器的测试项目
- 不使用生成器的单元测试项目
项目构建和运行完全正常,但IDE(包括Visual Studio、VS Code,甚至换了另一台电脑测试)里生成的代码始终显示错误波浪线。唯一例外是VS Code刚打开项目的短暂窗口内,能悬停查看生成方法的签名。
已尝试所有常规解决手段但均无效:
- 重启编辑器
- 清理并重建所有项目
- 仅重建源生成器后再打开IDE
- 清除所有缓存
- 重启电脑
源生成器项目.csproj(带额外尝试修复代码的版本)
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <IncludeBuildOutput>false</IncludeBuildOutput> <LangVersion>12</LangVersion> <IsRoslynComponent>true</IsRoslynComponent> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" PrivateAssets="all" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" /> </ItemGroup> <ItemGroup> <PackageReference Include="SourceGeneratorsKit" Version="0.0.1" GeneratePathProperty="true" PrivateAssets="all" /> </ItemGroup> <PropertyGroup> <GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn> </PropertyGroup> <Target Name="GetDependencyTargetPaths"> <ItemGroup> <TargetPathWithTargetPlatformMoniker Include="$(PKGSourceGeneratorsKit)\lib\netstandard2.0\SourceGeneratorsKit.dll" IncludeRuntimeDependency="false" /> </ItemGroup> </Target> </Project>
移除额外修复代码后的源生成器.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" PrivateAssets="all" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" /> </ItemGroup> <ItemGroup> <PackageReference Include="SourceGeneratorsKit" Version="0.0.1" GeneratePathProperty="true" PrivateAssets="all" /> </ItemGroup> </Project>
依赖项目引用源生成器的方式
<ItemGroup> <ProjectReference Include="..\Datapack.Net.SourceGenerator\Datapack.Net.SourceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> </ItemGroup>
源生成器核心代码
[Generator] public class ProjectGenerator : ISourceGenerator { private readonly SyntaxReceiver Projects = new DerivedClassesReceiver("Project"); public void Execute(GeneratorExecutionContext context) { if (!(context.SyntaxContextReceiver is SyntaxReceiver)) return; foreach (var i in Projects.Classes) { ProcessClass(context, i); } } public void ProcessClass(GeneratorExecutionContext context, INamedTypeSymbol symbol) { // Unimportant } public void Initialize(GeneratorInitializationContext context) { context.RegisterForSyntaxNotifications(() => Projects); } }
内容的提问来源于stack exchange,提问作者kinderhead
相关产品推荐
相关产品推荐

