.NET6源代码生成器-在另一个项目中创建类



我有3个项目

Project A (Client)
Project B (Server)
Project C (Shared)

在项目B中,我使用实体框架和所有实体类建立了DB连接,项目A(客户端(应访问项目B(服务器(的权限。我想在很大程度上依赖DTO进行客户端/服务器通信。这些DTO应该在Project C中创建,这样客户端和服务器都可以使用它们。源生成器非常适合生成DTO,但源生成器是否可以使用项目B中的实体类来生成项目C中的DTO?

您只能为正在构建的当前项目生成内容,但只要您通过引用对所需类型具有可见性,您仍然可以从其他项目访问信息。GeneratorExecutionContext具有context.Compilation.References,它为您提供了所有的MetadataReference挂钩。这是高级的,但您可以使用context.Compilation.GetAssemblyOrModuleSymbol(MetadataReference),它为每个引用提供类型模型的根;从,您可以检查所有类型及其属性、属性等,大概是为了生成DTO。

然而,我想知道显式是否更容易/更可取,并在B中做一些显式的事情,例如:

[module:GenerateDtoWhateverFor(typeof(B.Foo))]
[module:GenerateDtoWhateverFor(typeof(B.Bar))]
// etc

并检测/响应。

最新更新