为什么使用ttinclude而不是编译的程序集?

Luk*_*oid 5 c# t4 entity-framework tangible-t4-editor clarius-visual-t4

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

我这样做的原因是因为无论我尝试哪种扩展(Devart T4,Tangible-T4或Visual T4)都没有Visual Studio的C#编辑器提供的智能感知和支持,所以在纯C#编写代码生成改进了经验很多.

我现在面临的最大问题是,实体框架辅助类(如事实Accessibility,CodeGenerationTools,MetadataTools等)是一个ttinclude文件,而不是一个组件内定义; 目前我不得不重写这些类提供的许多功能,以便可以从程序集中使用它.

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

我想知道解决这个问题的最佳方法是什么,我已经考虑EF.Utility.CS.ttincludeTextTransform.exe,然后采用生成的C#并编译它,这是可取的吗?

谢谢,卢克

更新

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

Lad*_*nka 3

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

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

  • 我从来没有说过没有智能感知我就无法编写代码,但我确实了解智能感知(以及代码重构、访问参考等)提供的好处。我仍然部分使用 T4 模板,我的程序集定义了从 TextTransformation 派生的类。必须根据情况更改 ttinclude 文件,这对我来说表明所包含的类设计或实现得不够好,如果我们开始为每种情况复制和更改代码,就好像在说多态性不存在一样。 (2认同)
  • 我不认为 T4 及其包含的目的是提供 .NET 哲学。恕我直言,目的是使用 C# 或 VB.NET 作为脚本语言,其中脚本修改而不是超大型可重用的单个脚本更可取。 (2认同)
  • 我仔细阅读并思考了您所说的内容,最后同意您的说法。我不想丢失 T4 脚本语法,因此我改变了我要采用的方法。我会接受你的回答,让我重新思考这个问题:) (2认同)