Автоматически восстанавливать дизайнерские файлы
В последнее время я вносил некоторые улучшения во многие элементы управления, которые мы используем, например, присваиваю значениям свойств по умолчанию и делаю кнопки закрытыми вместо защищенных. При выполнении такого рода корректировок вам необходимо заново создать файлы конструктора форм, имеющих этот элемент управления, или элементов управления, которые наследуются от элемента управления.
В прошлом это не было проблемой, потому что у нас было только 20-30 форм. На данный момент у нас есть более 300 форм, что означает открытие такого же количества дизайнеров в VS2010.
Итак, мой вопрос: знаете ли вы способ автоматизации этого процесса, чтобы все формы были восстановлены?
Я думал о макросе, который ищет дизайнерские файлы и открывает файл (с максимум 25-50 открытыми файлами, чтобы убедиться, что VS не потерпит крах), но я не смог заставить это работать.
Я надеюсь, что у кого-то есть предложение!
3 ответа
Единственный способ сделать то, что вы хотите, - открыть дизайнер форм, добавить элемент управления и сохранить. Это восстановит код конструктора. Затем удалите вновь добавленный элемент управления, снова сохраните и закройте.
Я обычно добавляю кнопку, дважды щелкая по кнопке на панели инструментов. Это помещает кнопку в положение 0,0.
Я сделал это пару месяцев назад с проектом около 100 форм и пользовательских элементов управления. Вместо макроса, который использовался в файлах проекта, я записал временный макрос, затем запустил макрос для каждой формы / пользовательского элемента управления и проверил результаты.
Не путайте рефакторинг с переформатированием. Я часто оптимизирую и / или модифицирую код конструктора в больших формах. Например, я изменю порядок добавления элементов управления на панели и порядок добавления панелей на другие панели. Я бы не стал слепо регенерировать дизайнерский код.
Я также столкнулся с этой проблемой (см. Также: Принудительно WinForms для регенерации файлов.designer.cs).
В конце концов, большинство удаленных свойств получили уникальные имена, и я смог написать сценарий оболочки для удаления строк из файлов конструктора, содержащих имена свойств.
Обратите внимание, это фактически удаляет строку, а не просто оставляет пустую строку.
Его нужно запускать из Bash Shell, если у вас установлен msysgit, эта оболочка в порядке.
В этом TextForeColor
была собственность, удаляемая.
#!/bin/bash
files=$(find . -type f -name '*.Designer.cs' -print0 | xargs -0 grep -l 'TextForeColor')
for file in $files
do
echo $file
sed '/TextForeColor/ d' $file >$file.tmp
mv $file.tmp $file
done
Использовать наследование формы вместо сохранения изменений более 300 элементов управления.