Вчера столкнулся с интересным моментом при генерации *.designer.cs-файлов. Сначала подумал что это баг, но после недолгих размышлений пришел к выводу, что это не баг, а фича (“багофича” (с)).
Всё началось с того, что на одной из страниц сайта нужно было создать некоторую функциональность, которая уже была доступна дадругой странице. Сразу же было решено поместить эу функциональность в UserControl.После достаточно стандартных действий, copy&pase нужной разметки из страницы в только что созданный контрол, уже собирался писать в нём логину, но… Но студия ругалась на любое упоминание о вебконтроле, расположенном в mycontrol.ascx. “Странно” - подумал я и посмотрел содеримое файла mycontrol.ascx.designer.cs. В нём оказалось пусто. Тут же вспомнились похожие баги Visual Studio 2005 без установки на неё Service Pack 1 и было принято решение (как озакалось потом - ошибочное) руками дописать нужный код. Дописал. Сайт скомпилировался и даже попытался запуститься, но run-time ошибка не дала ему нормально функционировать.
Ошибка достаточно ясно указывала на источник проблемы: при копипасте я забыл добавить в контол директиву <%@ Register TagPrefix=“pref” TagName=“Popup” src="~/UserControl/Popup.ascx" %>
После добавление этой директивы в mycontrol.ascx, mycontrol.ascx.designer.cs был успешно сгенерирован автоматически и всё заработало, а я ещё раз убедился, что от copy&pase не стоит дать ничего хорошего.