Автоматический регенерировать файлы дизайнера
Недавно я делал некоторые улучшения для многих элементов управления, которые мы используем, например, давая свойства по умолчанию и делая закрытыми вместо защищенных кнопок.
Выполняя такие настройки, вам необходимо восстановить файлы конструктора форм, которые имеют этот элемент управления, или элементы управления, которые наследуются от элемента управления.
В прошлом это не было проблемой, потому что у нас было только 20-30 форм. На данный момент у нас есть более 300 форм, что означало бы открытие такого же количества дизайнеров в VS2010.
Итак, мой вопрос: знаете ли вы способ автоматизации этого процесса, чтобы все формы были регенерированы?
Я думал о макросе, который ищет файлы-дизайнеры и открывает файл (с максимальным количеством 25-50 файлов, чтобы убедиться, что VS не сбой), но я не смог получить это работа.
Надеюсь, у кого-то есть предложение!
Ответы
Ответ 1
Единственный способ, которым я нашел то, что вам нужно, - открыть конструктор форм, добавить элемент управления, а затем сохранить. Это позволит восстановить код дизайнера. Затем удалите вновь добавленный элемент управления, сохраните снова и закройте.
Я обычно добавляю кнопку, дважды щелкнув на кнопке в панели инструментов. Это помещает кнопку в положение 0,0.
Я сделал это пару месяцев назад с проектом с около 100 формами и пользовательскими элементами управления. Вместо макроса, который был рекурсирован над файлами проекта, я записал временный макрос, затем выполнил макрос для каждой формы/пользовательского контроля и проверил результаты.
Не путайте рефакторинг с переформатированием. Я часто оптимизирую и/или модифицирую код дизайнера в больших формах. Например, я изменил элементы управления заказами, добавленные на панели, и как панели добавляются к другим панелям. Я бы не слепо регенерировал код дизайнера.
Ответ 2
Я также столкнулся с этой проблемой (см. также: Force WinForms для восстановления файлов .designer.cs).
В конце концов, большинство свойств, которые я удалил, были уникально названы, и я смог написать оболочку script для удаления строк из файлов конструктора, содержащих имена свойств.
Обратите внимание, что это фактически удаляет строку, а не просто пустую строку.
Его нужно запускать из оболочки Bash, если у вас установлен 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
Ответ 3
Использовать наследование формы вместо сохранения изменений более чем 300 элементов управления.