引导问题
是否可以将ISourceGenerator
与CSharpCompilation.Create(...)
一起使用?
背景
我已经创建了一个基于ISourceGenerator
的Roslyn SourceGenerator。这个生成器用我不想自己写的代码创建了一些分部类,这些代码可以从属性和其他东西中生成。它在VisualStudio中运行良好。
我还创建了另一个程序,它生成C#代码,并使用CSharpCompilation.Create(...)
在内存中编译它。
现在我想将两者结合起来,这样以后的程序就可以跳过SourceGenerator在编译代码时将生成的部分。
我知道SourceGenerator不稳定,所以这个用例已经实现了吗?
我试着使用MetadataReference.CreateFromFile(typeof(MyGenerator).Assembly.Location)
并将其提供给CSharpCompilation.Create(references: x)
,但它不起作用=/
我知道分析仪有一个扩展方法WithAnalyzers
,但分析仪的工作方式不同。。。
您可以使用生成器驱动程序API。需要注意的是,在撰写本文时,API仍然被认为是测试版,可能会更改,但我怀疑只要你坚持下面的流程,它应该是好的。
基本上API是如何工作的是你:
- 调用
CSharpGeneratorDriver.Create
,传入生成器列表 - 调用您在编译中传递的这个方法,它将为您提供一个添加了生成的树的新编译