2010-07-30 52 views
0

我建立的代码生成一个加载项(C#,VS 08)为我们的团队。VsAddin或T4代码生成(VS 2008)

该插件创建一个新的菜单项,如果我在Solution Explorer中单击文件。 在那里我可以选择一个目标测试项目,其中生成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$ 

要生成模板我已经writen一些代码来

  • 创建的文件
  • 将它们添加到目标项目
  • 如果需要

可以看到,工作的“批”只有做生成一些代码创建方法。

  1. 现在我认为如果T4代是更好的解决方案,我的情况?
  2. 我有T4机制的一些好处吗? (我只看到一些T4结合EF或数据库相关的样本)
  3. 我应该用T4更灵活吗?

非常感谢。

回答

1

你不需要做一个非此即彼/或选择在这里“K”,你可以混合和匹配插件和T4。

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

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

所以你可以保留你的加载项的入口点和核心工作方式,但是使用T4来提供模板引擎并且避免必须自己维护那个部分。您可能会使用#@ parameter#>指令将替换参数传递到您的用于T1,T2,T3等的模板中。

希望这可以为您提供一些前进选项的想法。

+0

感谢您的简短解释。我会玩一点。我下载了需要的东西,并立即开始。我首先想到我编写了一些代码来从源文件和模板中收集所有需要的信息,将它们放入数据结构中,将其导入模板文件并引用模板中的字段。 – Khh 2010-07-31 19:06:04