我一直在编写一个程序集来简化我的POCO类型生成。我有一个核心程序集,其中包含多个tt文件并用于生成代码。
我这样做的原因是因为无论我尝试哪种扩展(Devart T4,Tangible-T4或Visual T4)都没有Visual Studio的C#编辑器提供的智能感知和支持,所以编写代码生成纯C#可以大大改善体验。
我面临的最大问题是实体框架帮助程序类(例如Accessibility
,CodeGenerationTools
,MetadataTools
等)是在ttinclude文件中定义的,而不是程序集;目前我不得不重写这些类提供的许多功能,以便可以从程序集中使用它。
我的问题是,为什么实体框架团队决定使用ttinclude文件而不是某些已编译的程序集?使用程序集方法似乎在更多情况下会更有用,但仍然不会影响T4代码生成(因为它不是<#@ include #>
而是<#@ assembly #>
)。
我想知道解决这个问题的最佳方法是什么,我已经考虑通过EF.Utility.CS.ttinclude
运行TextTransform.exe
然后采用生成的C#并编译它,这是否可取?
谢谢,卢克
更新
目前我所做的是将EF.Utility.CS.ttinclude
添加到我的项目中,将文件上的自定义工具设置为TextTemplatingFilePreprocessor
。这将生成包含类的代码。然后我复制了这个cs文件,删除了负责编写输出的类(它有方法TransformText()
)并编译成一个程序集。我现在可以在程序集中使用实体框架实用程序类。
答案 0 :(得分:2)
使用ttinclude
而不是汇编的原因与使用T4而不是使用自定义工具进行类生成(这是您实际正在做的以及设计人员之前使用的大部分内容)相同。可以更改T4和ttinclude
。您可以复制ttinclude
并创建小的更改,并将其包含在每个项目的主要T4基础知识中。
顺便说一下。你是否知道有成千上万的程序员可以在没有任何智能感知的情况下编写代码;)对智能感知的错误支持并不是放弃使用T4模板的理由。