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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:35:54