2013-08-21 2 views
3

Я использовал T4 для генерации некоторых классов сущностей, но я забыл сделать их Serializable. Итак, есть ли решение использовать что-то вроде T4, чтобы добавить атрибут Serializable ко всем моим классам?Изменение измененных классов, сгенерированных T4

+0

Не ответ, а подсказка для будущего: Сила T4 проявляется только тогда, когда вы постоянно восстанавливаете классы. IE, вы не изменяете сгенерированный код. Тогда это было бы очень просто. Просто измените шаблон и регенерируйте. Если вам необходимо расширить сгенерированные классы, используйте частичные классы/методы. Если вы просто сгенерируете один раз, когда T4 выродится в программу копирования-вставки с поддержкой инструмента. – FuleSnabel

ответ

1

Если вы уже изменили свои сгенерированные классы, я думаю, вам может быть проще сделать замену глобальной среды Visual Studio с причудливым регулярным выражением, чтобы найти классы, которые вам нужно изменить. (Если это невозможно, нетрудно написать быстрое консольное приложение для обработки файлов).

Использование Т4 вы можете управления, какие файлы будут перезаписаны, например, с помощью Output.PreserveExistingFile, который поставляется с T4 Toolbox.

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

И после этого вы можете удалить определенные файлы, которые хотите восстановить. Но однако вы определяете, какие файлы перезаписывать, любые изменения в тех файлах, которые вы сделали с момента последнего восстановления, будут потеряны. Одна из рекомендаций заключается в том, чтобы создавать ваши шаблоны как частичные классы, чтобы вы могли вносить все изменения вручную в отдельный файл (но это действительно не поможет вам, если вы уже изменили ваши сгенерированные классы).

1

Являются ли эти классы классов неполными? Если это так, используйте другой шаблон T4, чтобы генерировать определение частичного класса, декорированное с помощью Serializable Attribute.

В противном случае вы можете использовать Visual Studio CodeModel, чтобы идентифицировать все классы, которые нуждаются в этой реализации, внутри другого шаблона T4, а затем позволить этому шаблону T4 добавить необходимые фрагменты кода.

Если вы используете tangible's T4 Editor, он поставляется с бесплатной галереей шаблонов, и, насколько я знаю, есть шаблон называется «Добавить NotifyPropertyChanged», который делает довольно много, что вы ищете: открывать классы кода внутри решения и делают они реализуют данный интерфейс. Вы можете легко адаптировать его и получить желаемую функциональность.

Надеюсь, что это поможет.

Смежные вопросы