C#将SourceGenerator与CSharpCompilation一起使用



引导问题

是否可以将ISourceGeneratorCSharpCompilation.Create(...)一起使用?

背景

我已经创建了一个基于ISourceGenerator的Roslyn SourceGenerator。这个生成器用我不想自己写的代码创建了一些分部类,这些代码可以从属性和其他东西中生成。它在VisualStudio中运行良好。

我还创建了另一个程序,它生成C#代码,并使用CSharpCompilation.Create(...)在内存中编译它。

现在我想将两者结合起来,这样以后的程序就可以跳过SourceGenerator在编译代码时将生成的部分。

我知道SourceGenerator不稳定,所以这个用例已经实现了吗?

我试着使用MetadataReference.CreateFromFile(typeof(MyGenerator).Assembly.Location)并将其提供给CSharpCompilation.Create(references: x),但它不起作用=/

我知道分析仪有一个扩展方法WithAnalyzers,但分析仪的工作方式不同。。。

您可以使用生成器驱动程序API。需要注意的是,在撰写本文时,API仍然被认为是测试版,可能会更改,但我怀疑只要你坚持下面的流程,它应该是好的。

基本上API是如何工作的是你:

  1. 调用CSharpGeneratorDriver.Create,传入生成器列表
  2. 调用您在编译中传递的这个方法,它将为您提供一个添加了生成的树的新编译

最新更新