繁体   English   中英

VsAddin或T4用于代码生成(VS 2008)

[英]VsAddin or T4 for code generation (VS 2008)

我已经为我们的团队构建了一个用于代码生成(C#,VS 08)的插件。

如果我在解决方案资源管理器中单击一个文件,则该插件会创建一个新的菜单项。 在那里,我可以选择生成2个文件的目标测试项目。

对于代码生成过程,我需要解决方案资源管理器中所选项目的信息(例如接口,类声明的泛型类型)。

我的源类看起来像

public class CustomerLogic : BaseBL<T1, T2, T3>, ICustomerBL

生成的容器类

public class CustomerContainer : BaseBLDummyContainer<T1, T2, T3>

生成的虚拟类看起来像

public class CustomerBLDummy : BaseBLDummy<T1, T2, T3, CustomerContainer>, ICustomer

我是怎么意识到的?

我创建了两个模板(容器和虚拟),将占位符放在空格中,因此两个模板文件看起来像

容器模板

public class $Classname$ : BaseBLDummyContainer<$T1$, $T2$, $T3$>

虚拟模板

public class $Classname$ : BaseBLDummy<$T1$, $T2$, $T3$, $TContainer$>$, TInterface$

为了生成模板,我已经写了一些代码到

  • 创建文件
  • 将它们添加到目标项目
  • 根据需要创建方法

您可以看到,“大量”的工作只能生成一些代码。

  1. 现在,我考虑使用T4的一代是否可以更好地解决我的情况?
  2. 我有T4机制的一些好处吗? (我只看到了一些与EF或数据库相关的生成相结合的T4示例)
  3. 我应该更灵活地使用T4吗?

非常感谢。

您无需在此处选择“ k”,您可以混合并匹配加载项和T4。

T4开箱即用地具有非常简单的UI绑定到Visual Studio,它仅使用自定义工具机制(IVsSingleFileGenerator)将模板文件连接到项目中的输出文件。 (有关更复杂的输出,请参见T4Toolbox社区项目)。

但是,T4还在VS中公开了一个服务接口(STextTemplating / ITextTemplating),您可以在VS加载项和VS包中使用该服务接口。

因此,您可以保留外接程序的入口点和核心工作方式,但可以使用T4提供模板引擎,而不必自己维护该部分。 您可能会使用<#@ parameter#>指令将替换参数传递到T1,T2,T3等的模板中。

希望这为您提供一些前进的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM