我一直在编写一个程序集来简化我的大部分 POCO 类型生成。我有一个核心程序集,其中包含多个 tt 文件并用于生成代码。
我这样做的原因是因为无论我尝试哪个扩展(Devart T4、Tangible-T4 或 Visual T4),都没有 Visual Studio 的 C# 编辑器提供的智能感知和支持那么好,所以用纯 C# 编写代码生成可以提高经验很多。
我面临的最大问题是实体框架助手类(例如Accessibility
,等)是在 ttinclude 文件中定义的,而不是在程序集中定义的CodeGenerationTools
。MetadataTools
目前我不得不重写这些类提供的许多功能,以便它可以从程序集中使用。
我的问题是,为什么实体框架团队决定使用 ttinclude 文件而不是一些已编译的程序集?使用程序集方法似乎在更多情况下更有用,并且仍然不会影响 T4 代码生成(而不是使用<#@ include #>
它<#@ assembly #>
)。
我想知道解决这个问题的最佳方法是什么,我已经考虑EF.Utility.CS.ttinclude
过运行TextTransform.exe
然后获取生成的 C# 并编译它,这是否可取?
谢谢,卢克
更新
目前我所做的是添加EF.Utility.CS.ttinclude
到我的项目中,将文件上的自定义工具设置为TextTemplatingFilePreprocessor
. 这将生成包含类的代码。然后我复制了这个cs文件,删除了负责编写输出的类(它有方法TransformText()
)并编译成一个程序集。我现在可以在我的程序集中使用实体框架实用程序类。