我为我们的团队构建了一个用于代码生成的插件(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$
要生成模板,我已经写了一些代码
你可以看到,只有生成一些代码才能做很多工作。
非常感谢。
答案 0 :(得分:1)
你不需要在这里做任何/或选择'k',你可以混合搭配加载项和T4。
T4有一个非常简单的UI绑定到Visual Studio开箱即用,它只使用自定义工具机制(IVsSingleFileGenerator)将模板文件连接到项目中的输出文件。 (有关更复杂的输出,请参阅T4Toolbox社区项目。)
但是,T4还公开了VS(STextTemplating / ITextTemplating)中的服务接口,您可以在VS加载项和VS包中使用它。
因此,您可以保留加载项的入口点和核心工作方式,但使用T4提供模板引擎并避免必须自己维护该部分。你可能会使用 &lt;#@ parameter#&gt;指令将替换参数传递给模板中的T1,T2,T3等。
希望这能为您提供一些前进选择的想法。