我使用T4生成一些实体类,但我忘了将它们Serializable
。那么是否有任何解决方案可以使用T4
之类的内容为我的所有类添加Serializable
属性?
答案 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();
#>
然后您可以删除要重新创建的特定文件。但是,无论您确定要覆盖哪些文件,自上次重新生成以来对这些文件所做的任何更改都将丢失。一个建议是将模板构建为部分类,以便您可以将所有手动修改放在单独的文件中(但如果您已经修改了生成的类,那么这对您没有任何帮助。)