5

我一直在编写一个程序集来简化我的大部分 POCO 类型生成。我有一个核心程序集,其中包含多个 tt 文件并用于生成代码。

我这样做的原因是因为无论我尝试哪个扩展(Devart T4、Tangible-T4 或 Visual T4),都没有 Visual Studio 的 C# 编辑器提供的智能感知和支持那么好,所以用纯 C# 编写代码生成可以提高经验很多。

我面临的最大问题是实体框架助手类(例如Accessibility,等)是在 ttinclude 文件中定义的,而不是在程序集中定义的CodeGenerationToolsMetadataTools目前我不得不重写这些类提供的许多功能,以便它可以从程序集中使用。

我的问题是,为什么实体框架团队决定使用 ttinclude 文件而不是一些已编译的程序集?使用程序集方法似乎在更多情况下更有用,并且仍然不会影响 T4 代码生成(而不是使用<#@ include #><#@ assembly #>)。

我想知道解决这个问题的最佳方法是什么,我已经考虑EF.Utility.CS.ttinclude过运行TextTransform.exe然后获取生成的 C# 并编译它,这是否可取?

谢谢,卢克

更新

目前我所做的是添加EF.Utility.CS.ttinclude到我的项目中,将文件上的自定义工具设置为TextTemplatingFilePreprocessor. 这将生成包含类的代码。然后我复制了这个cs文件,删除了负责编写输出的类(它有方法TransformText())并编译成一个程序集。我现在可以在我的程序集中使用实体框架实用程序类。

4

1 回答 1

3

使用而不是汇编的原因ttinclude与使用 T4 而不是自定义工具生成类的原因相同(这是您实际在做的,也是大多数设计人员以前使用的)。T4 并且ttinclude可以更改。您可以复制ttinclude和创建小的更改,并将其包含在每个项目基础的主要 T4 中。

顺便提一句。你知道有成千上万的程序员可以在没有任何智能感知的情况下编写代码;) 智能感知支持更差并不是放弃使用 T4 模板的理由。

于 2012-01-25T10:14:28.160 回答