更改T4生成的修改后的类

时间:2013-08-21 06:57:56

标签: t4

我使用T4生成一些实体类,但我忘了将它们Serializable。那么是否有任何解决方案可以使用T4之类的内容为我的所有类添加Serializable属性?

2 个答案:

答案 0 :(得分:1)

那些生成的类是否是部分类?如果是这样,请使用另一个T4模板,以生成使用Serializable属性修饰的部分类定义。

否则你可以使用Visual Studio CodeModel来识别在另一个T4模板中需要此实现的所有类,然后让这个T4模板添加必要的代码片段。

如果您使用的是tangible's T4 Editor,它会附带一个免费的模板库,据我所知,有一个名为“Add NotifyPropertyChanged”的模板可以满足您的需求:发现内部的代码类解决方案并使它们实现给定的接口。您可以轻松地调整那个并获得所需的功能。

希望有所帮助。

答案 1 :(得分:1)

如果您已经修改了生成的类,我认为您可能会发现使用Visual Studio的全局替换更容易使用花哨的正则表达式来查找需要更改的类。 (如果不可能,编写一个快速控制台应用程序来处理文件并不困难。)

使用T4,可以控制哪些文件被覆盖,例如使用T4 Toolbox附带的Output.PreserveExistingFile

<#
  var t = new SampleTemplate();
  t.Output.File = "Sample.cs";
  t.Output.PreserveExistingFile = true;
  t.Render();
#>

然后您可以删除要重新创建的特定文件。但是,无论您确定要覆盖哪些文件,自上次重新生成以来对这些文件所做的任何更改都将丢失。一个建议是将模板构建为部分类,以便您可以将所有手动修改放在单独的文件中(但如果您已经修改了生成的类,那么这对您没有任何帮助。)