我正在尝试开发一个源生成器,理论上我可以将其添加到我的项目中,并为给定的项目找到标记有特定属性的类,然后为每个类构建相应的生成文件。
我已经设置了单元测试,可以有效地使用GeneratorDriver
来实例化和运行生成器并评估它们的输出。
问题
类存在于从测试项目引用的辅助项目中。该编译似乎不包括其他项目的syntaxTree。
我试过用一个简单的.cs程序体调用CreateCompilation
,然后调用.AddReferences(MetadataReference.CreateFromFile(typeof(User).Assembly.Location)
,然后将其传递给in驱动程序。
在运行时,我的语法树仍然是一样的(也许是因为我认为引用被当作程序集引用对待
我假设在正常情况下,生成器将以Analyzer
的形式与引用它们的项目的上下文一起运行,但出于单元测试的目的,有没有一种方法可以有效地将编译设置为另一个项目或引用另一个工程(这样,当我遍历不同的语法树时,我可以访问外部程序集中标记有属性的类(?
所以我通过创建一个工作区(使用Microsoft.CodeAnalysis.Workspaces(来解决这个问题,并加载我的另一个项目,从中获得编译,并将其传递给我的GeneratorDriver
。
我的发电机还没有100%工作,但这肯定让我克服了障碍。