【问题标题】:VsAddin or T4 for code generation (VS 2008)用于代码生成的 VsAddin 或 T4 (VS 2008)
【发布时间】:2011-03-23 06:05:28
【问题描述】:

我已经为我们的团队构建了一个用于代码生成(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 机制有什么好处吗? (我只看到一些 T4 示例与 EF 或与数据库相关的生成相结合)
  3. 我应该更灵活地使用 T4 吗?

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    您无需在此处选择“k”,您可以混合搭配插件和 T4。

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

    不过,T4 还在 VS 中公开了一个服务接口(STextTemplating/ITextTemplating),您可以从 VS 插件和 VS 包中使用它。

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

    希望这能给您一些想法,让您可以选择前进。

    【讨论】:

    • 感谢您的简短解释。我会玩一点。我已经下载了所需的东西并立即开始。我首先认为我编写了一些代码来从源文件和模板中收集所有需要的信息,将其放入数据结构中,将其导入模板文件并引用模板中的字段。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2011-05-03
    • 2013-10-03
    • 2013-11-18
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多