Как заставить Visual Studio заново создать файлы .designer для файлов aspx / ascx? - PullRequest
383 голосов
/ 05 сентября 2008

Иногда, когда я редактирую страницу или управляю, файлы .designer перестают обновляться новыми элементами управления, которые я помещаю на страницу. Я не уверен, что является причиной этого, но мне интересно, есть ли способ заставить Visual Studio заново создать файл .designer. Я использую Visual Studio 2008

РЕДАКТИРОВАТЬ: Извините, я должен был отметить, что я уже пробовал:

  • Закрытие и повторное открытие всех файлов и Visual Studio
  • Внесение изменений в элемент управления runat = "server" на странице
  • Удаление и повторное добавление директивы страницы

Ответы [ 44 ]

360 голосов
/ 05 сентября 2008

Если вы откроете файл .aspx и переключитесь между представлением конструктора и представлением html и обратно он предложит VS проверить элементы управления и добавить все, что отсутствует в файл конструктора.

В VS2013-15 есть команда Преобразовать в веб-приложение в меню Проект . До VS2013 эта опция была доступна в контекстном меню правой кнопкой мыши для файлов (c / p) x. Когда это будет сделано, вы должны увидеть, что теперь у вас есть файл * .Designer.cs, и ваши элементы управления в Design HTML будут доступны для вашего элемента управления.

PS: Это не следует делать в режиме отладки, поскольку не все «перекомпилируется» при отладке.

Некоторые люди также сообщают об успехе, удаляя файл .designer.cs, а затем воссоздают пустой файл с тем же именем.

88 голосов
/ 05 сентября 2008

Ну, я нашел решение, которое работает, хотя мне оно не очень нравится. Мне пришлось удалить файл .designer.cs, а затем воссоздать пустой файл с тем же именем. Когда я вернулся и снова сохранил файл aspx, файл конструктора был сгенерирован заново.

Хитрая!

77 голосов
/ 29 января 2009

Я использую следующий метод, который работает каждый раз:

  • Выберите все код перед (разметка html и т. Д.) В редакторе файла aspx / ascx.
  • Cut.
  • Сохранить.
  • Paste.
  • Сохранить.

Рекомпилированные.

59 голосов
/ 22 января 2011

Я недавно увидел, что у меня та же проблема. Visual Studio 2010 отказывается обновлять файл конструктора.

Как оказалось, VS не изменяет файл конструктора для страницы, которая использует CodeFile (запуск страниц) вместо CodeBehind (DLL). Это верно независимо от того, сколько раз вы закрываете VS, перезагружаете проект, воссоздаете элементы управления или изменяете файл. Ничто не побудит VS переродить дизайнера. Как будто он не создает файл конструктора для страниц CodeFile, но требует, чтобы он был там.

Я изменил его на CodeBehind и сохранил страницу. Файл конструктора обновился сразу. Тогда я просто изменил его обратно, и все было по-прежнему золотым. Такое поведение, по-видимому, является новым для VS 2010 / .NET 4.0, поскольку VS 2008 по умолчанию не страдает от этого.

Это эта часть:

<%@ Page Language="vb" AutoEventWireup="false" CodeFile="YourPage.aspx.vb" Inherits="YourPageClass" %>

Измените CodeFile на CodeBehind, сохраните, а затем верните.

37 голосов
/ 07 октября 2008

Существует еще одна возможность: в вашем файле ASPX может быть ошибка, из-за которой Visual Studio не может заново создать конструктор.

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

21 голосов
/ 30 января 2014

Большинство решений здесь не работают, если вы работаете с Visual Studio 2013 и, возможно, 2012. Microsoft, вероятно, представила некоторые оптимизации, чтобы сделать IDE более быстрой, следовательно, они сократили количество случаев, запускающих генератор кода. Следующие сценарии, которые раньше работали, больше не работают:

  1. Удалить файл aspx или ascx - больше не проверяет этот случай
  2. Вырезать все содержимое и вставить в файл aspx или ascx - больше не работает, без изменений в ссылках
  3. Преобразовать в веб-приложение - опция больше не доступна
  4. Произвольное изменение содержимого файла aspx / ascx - больше не работает (см. 2).

Решение удивительно простое, но немного громоздкое. Чтобы запустить генератор кода, измените что-то, что потребует генерации designer.aspx.cs. Изменение содержимого, которое не влияет на код, например стиль CSS или добавление текста, не вызовет генератор кода. Вы должны изменить ссылочный элемент управления. Вот как это сделать:

В ascx или aspx измените идентификатор элемента управления

<asp:HyperLink ID="MyLink" runat="server" NavigateUrl="~/Default.aspx" Text="Home" />

до

<asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />

Перейдите в ascx.cs или aspx.cs и убедитесь, что вы также переименовали все ссылки на «MyLink» в «theLINK». Сохраните и сделайте сборку, и вам будет хорошо идти.

14 голосов
/ 09 сентября 2008

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

9 голосов
/ 14 февраля 2014

Преобразование в веб-приложение не работает для меня.

Удаление designer.cs и вставка пустого файла designer.cs также не работали.

Но да, это сработало:

  1. Выбрать все (Default.aspx)
  2. вырезано
  3. Сохранить Default.aspx
  4. Вставить
  5. Сохранить Default.aspx

Готово. Создан новый файл designer.cs. :)

6 голосов
/ 11 мая 2009

Я часто обнаруживал, что копирование / вставка вызывает у меня такое поведение . Большинство случаев можно решить путем редактирования идентификатора серверного элемента управления (просто добавьте символ, а затем удалите его).

Также помните, что элементы управления внутри таких вещей, как повторители, не видны в файле конструктора.

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

5 голосов
/ 01 февраля 2013

Я нашел способ решить эту проблему без изменения кода или выполнения команд, таких как «Преобразовать в веб-приложение» - и это тоже просто!

Я обнаружил, что перезапуск Visual Studio часто решает проблему, но иногда это не так. В этих случаях, если вы закрываете Visual Studio и затем удаляете все содержимое в каталоге "obj" для веб-проекта , прежде чем открывать его снова, он всегда работал для меня.

(при повторном запуске вы просто добавляете пробел и удаляете его снова, а затем нажимаете "Сохранить", чтобы файл конструктора был правильно восстановлен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...