这里是 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)
{
}
}
但是,即使如此,仍然报告相同的错误。
如何解决这个问题?
出现语法错误后,我决定实际实现 I增量生成器:[...]
但是,即使如此,仍然报告相同的错误。
是的,当然,因为你还在使用
GeneratorExecutionContext
。该错误明确告诉您禁止使用 GeneratorExecutionContext
。
如何解决这个问题?
不要使用GeneratorExecutionContext
。