【发布时间】:2021-11-06 06:00:33
【问题描述】:
我正在尝试测试源生成器。 生成器:
[Generator]
public class CustomGenerator : ISourceGenerator
{
public void Initialize(GeneratorInitializationContext context) { }
public void Execute(GeneratorExecutionContext context)
{
//...
}
}
测试代码:
Compilation inputCompilation = CreateCompilation(@"
namespace MyCode
{
public class Program
{
public static void Main(string[] args)
{
}
}
}
");
var generator = new CustomGenerator();
var driver = CSharpGeneratorDriver.Create(generator);
driver.RunGeneratorsAndUpdateCompilation(inputCompilation, out var outputCompilation, out var diagnostics);
static Compilation CreateCompilation(string source)
=> CSharpCompilation.Create("compilation",
new[] { CSharpSyntaxTree.ParseText(source) },
new[] { MetadataReference.CreateFromFile(typeof(Binder).GetTypeInfo().Assembly.Location) },
new CSharpCompilationOptions(OutputKind.ConsoleApplication));
问题是 context.SyntaxReceiver 总是为空,如何解决?
【问题讨论】:
-
您需要首先在您的
Initialize方法中注册一个语法接收器,方法是调用context.RegisterForSyntaxNotifications。见the cookbook。
标签: c# roslyn roslyn-code-analysis