Как избежать ненужных изменений в *.designer.cs и *.resx?

По какой-то причине Visual Studio winforms время от времени проектирует временные изменения для создания файлов дизайнера и соответствующих resx.

Досадно до сих пор:

  • изменяет порядок деклараций/инициализации элементов управления
  • изменяется на некоторые размеры управления (наиболее заметно ширина элементов меню)
  • изменяет сериализованные изображения, встроенные в ресурсы (... подождите, что???)

Эти изменения не влияют на функциональность управления формами и пользователями, или они выглядят, но они создают много шума в контроле источника, делая невозможным слияние, или требуют исправления ошибок вручную, чтобы устранить все изменения, которые фактически меняют примечания, вплоть до следующее изменение дизайнера.

Любые идеи о том, как предотвратить студию от нее?

Ответы

Ответ 1

Пожалуйста, попробуйте заблокировать ваш контроль с помощью правой кнопки, затем выберите "Блокировать элементы управления" в вашем Form/UserControl.

enter image description here

К сожалению, нет никакого способа отделить "полезные" изменения в сгенерированном коде от "загрязнения", которые исходят от ошибки конструктора управления или внутренней работы.

Если функция блокировки не работает по каким-либо причинам, мы не можем этого сделать, кроме тех ужасных хаков:

  • Как только ваша форма будет создана и закончена, переместите сгенерированный код (метод InitializeComponent и декларации) из .designer.cs. Visual Studio больше не тронет. Недостатком является то, что у вас больше не будет визуальной поддержки.

  • Наличие файла .designer.cs, помеченного как только чтение, не позволит Visual Studio пытаться его изменить. Иногда это может привести к ошибкам дизайнера-дизайнера Visual Studio, но он оставит ваш .designer.cs неповрежденным.

Существует другой способ, заключающийся в том, что вы вообще не используете конструктора. Это приводит к новому способу применения программирования winforms, потому что вы предоставите код для инициализации элементов управления с их свойствами и событиями.

Это не так громоздко и уродливо, как кажется: использование шаблонов многократного использования и функций OO может быть очень приятным, а некоторые хорошо выровненные вызовы методов лучше, чем какой-то ужасный код, скрытый в файле .designer.cs.

Конечно, визуальной поддержки не будет, но вы можете обмануть ее, добавив свой элемент управления в пустой контейнер в режиме разработки, чтобы посмотреть, как это выглядит.

Ответ 2

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

Итак, если вам не нравится мусор, вы не используете конструктор, потому что он создает мусор, что он работает. Или вы начинаете с этого и в какой-то момент решаете никогда не открывать его снова, а затем выполнять свою очистку.

Или вы переходите в WPF, это соответствует вашим требованиям, и пришло время сделать WinForms устаревшим, в какой-то момент поддержка для него наверняка закончится.