是否可以在 .net 中链接源生成器?

时间:2021-07-14 13:52:15

标签: c# roslyn csharp-source-generator

我有一个项目,我将 INotifyPropertyChanged 实现为源生成器,我希望能够在我的各种以 MVVM 为中心的项目中使用它。

该项目使用将属性应用于分部类中的字段的方法,它将为这些字段生成属性。

然而,我当前的项目基于 Monogame,并且 UI 框架本身并不支持绑定,所以我想我会提出一个解决方案,避免使用另一个源生成器进行反射。

不幸的是,在我的 INotifyPropertyChanged 源生成器中生成的属性似乎在我的 MLEM.Ui.Binding 源生成器中不可见。我只获得了原始源代码中的属性。

有没有办法让我先运行 INotifyPropertyChanged 源生成器,然后在我的第二个绑定源生成器中使用它生成的源代码?

我尝试过的事情:

  • 按照我想要的顺序(双向)排列我的项目参考
  • EmitCompilerGeneratedFilesCompilerGeneratedFilesOutputPath 设置到一个目录(我努力排除 obj/Debug/generated 中的文件,所以我最终得到了重复的类)

1 个答案:

答案 0 :(得分:0)

问题的答案,正如 Marc Gravell 所解释的那样。

话虽如此,我已经成功地解决了这个问题,但不是通过在单个编译单元中链接多个源生成器。

我很幸运,我将绑定生成为一组扩展方法,这意味着我可以将我的 ViewModel 和它们的 INPC 源生成器移动到它自己的项目中,然后让我的绑定源生成器在原始项目上运行.

这意味着当绑定源生成器检查它时,ViewModel 程序集的输出已经稳定,并且组装的 INPC 代码已经到位。

这可能并不适用于所有人,但也许它开启了一种可能性。

相关问题