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

时间:2010-07-30 13:14:48

标签: c# visual-studio-2008 code-generation t4

我为我们的团队构建了一个用于代码生成的插件(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

我是如何实现的?

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

Containertemplate

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

Dummytemplate

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

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

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

你可以看到,只有生成一些代码才能做很多工作。

  1. 现在我考虑使用T4这一代是否能更好地解决我的问题?
  2. 我是否有T4机制的一些好处? (我只看到一些T4样本与EF或数据库相关的一代)
  3. 我应该对T4更灵活吗?
  4. 非常感谢。

1 个答案:

答案 0 :(得分:1)

你不需要在这里做任何/或选择'k',你可以混合搭配加载项和T4。

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

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

因此,您可以保留加载项的入口点和核心工作方式,但使用T4提供模板引擎并避免必须自己维护该部分。你可能会使用 &lt;#@ parameter#&gt;指令将替换参数传递给模板中的T1,T2,T3等。

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