使用 GeneratorExecutionContext.AddSource 方法时出现错误 RS1035“分析器禁止使用该符号”

问题描述 投票:0回答:1

这里是 Roslyn 源生成器的初学者。

我正在关注 Microsoft 的源生成器文档。我创建了一个 .NET Standard 2.0 类库,并将以下内容设置为 csproj 文件的内容:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
      
      <!-- Property below is required for [GeneratorAttribute] -->
      <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.11.0" />
  </ItemGroup>

</Project>

现在,根据文档中的示例代码,我创建一个具有

[Generator]
属性的新类,该类遵循
ISourceGenerator
接口:

[Generator]
public class Sample : ISourceGenerator
{
    public void Execute(GeneratorExecutionContext context)
    {
    }

    public void Initialize(GeneratorInitializationContext context)
    {
    }
}

但是,当我在

context.AddSource
方法中添加
Execute
方法调用时:

[Generator]
public class Sample : ISourceGenerator
{
    public void Execute(GeneratorExecutionContext context)
    {
        context.AddSource("Foo.g.cs", "public class Bar { }");
    }

    public void Initialize(GeneratorInitializationContext context)
    {
    }
}

然后我在

context.AddSource
方法调用上看到此语法错误:

RS1035 The symbol 'GeneratorExecutionContext' is banned for use by analyzers: Non-incremental source generators should not be used, implement IIncrementalGenerator instead

出现语法错误后,我决定实际实现

IIncrementalGenerator

[Generator]
public class Sample : IIncrementalGenerator
{
    public void Execute(GeneratorExecutionContext context)
    {
        context.AddSource("Foo.g.cs", "public class Bar { }");
    }

    public void Initialize(IncrementalGeneratorInitializationContext context)
    {
    }
}

但是,即使如此,仍然报告相同的错误。

如何解决这个问题?

c# .net roslyn sourcegenerators
1个回答
0
投票

出现语法错误后,我决定实际实现 I增量生成器:[...]

但是,即使如此,仍然报告相同的错误。

是的,当然,因为你还在使用

GeneratorExecutionContext
。该错误明确告诉您禁止使用
GeneratorExecutionContext

如何解决这个问题?

不要使用GeneratorExecutionContext

© www.soinside.com 2019 - 2024. All rights reserved.