C#将SourceGenerator与CSharp编译一起使用
引导问题 是否可以将C#将SourceGenerator与CSharp编译一起使用,c#,roslyn,roslyn-code-analysis,C#,Roslyn,Roslyn Code Analysis,引导问题 是否可以将ISourceGenerator与CSharpCompilation.Create(…)一起使用 背景 我基于ISourceGenerator创建了一个Roslyn SourceGenerator。这个生成器使用我不想自己编写的代码创建一些分部类,这些代码可以从属性和其他内容生成。它在VisualStudio中运行良好 我还创建了另一个生成C代码的程序,并使用csharpcomilation.Create(…)在内存中编译它 现在我想将两者结合起来,以便后面的程序可以跳过So
ISourceGenerator
与CSharpCompilation.Create(…)
一起使用
背景
我基于ISourceGenerator
创建了一个Roslyn SourceGenerator。这个生成器使用我不想自己编写的代码创建一些分部类,这些代码可以从属性和其他内容生成。它在VisualStudio中运行良好
我还创建了另一个生成C代码的程序,并使用csharpcomilation.Create(…)
在内存中编译它
现在我想将两者结合起来,以便后面的程序可以跳过SourceGenerator在编译代码时生成的部分
我知道SourceGenerator不稳定,那么这个用例已经实现了吗
我尝试使用MetadataReference.CreateFromFile(typeof(MyGenerator.Assembly.Location)
并将其馈送到csharpcomilation.Create(references:x)
,但它不起作用=/
我知道分析器有一个扩展方法
和分析器
,但是分析器的工作方式不同…有一个GeneratorDriver API可以使用。作为一个警告,在撰写本文时,API仍然被认为是测试版,可能会发生变化,但我怀疑,只要您坚持下面的过程,它应该是好的
API的基本工作原理是:
CSharpGeneratorDriver.Create
,传入生成器列表您可以使用GeneratorDriver API。作为一个警告,在撰写本文时,API仍然被认为是测试版,可能会发生变化,但我怀疑,只要您坚持下面的过程,它应该是好的 API的基本工作原理是:
CSharpGeneratorDriver.Create
,传入生成器列表非常感谢。工作得很有魅力。一个重要的细节是,需要使用最新版本的C#解析SyntaxTree以支持SourceGenerators,但是抛出的异常是直接的。谢谢!工作得很有魅力。一个重要的细节是,需要使用最新版本的C#解析SyntaxTree以支持SourceGenerators,但抛出的异常是直接的。