Иногда, когда я редактирую страницу или управляю файлами .designer, перестаньте обновляться новыми элементами управления, которые я размещаю на странице. Я не уверен, что это может произойти, но мне интересно, есть ли способ заставить Visual Studio регенерировать файл .designer. Я использую Visual Studio 2008
РЕДАКТИРОВАТЬ: Извините, я должен был заметить, что я уже пробовал:
Если вы открываете файл .aspx и переключаетесь между представлением дизайна и html-представлением и назад он предложит VS проверить элементы управления и добавить все, что отсутствует в файл конструктора.
В VS2013-15 есть команда Преобразовать в веб-приложение в меню Проект. До VS2013 эта опция была доступна в контекстном меню контекстного меню для файлов (c/p) x. Когда это будет сделано, вы увидите, что теперь у вас есть файл *.Designer.cs, и ваши элементы управления в HTML-дизайне будут доступны для вашего контроля.
PS: Это не должно быть сделано в режиме отладки, так как не все "перекомпилировано" при отладке.
Некоторые люди также сообщили об успехе, удалив файл .designer.cs, а затем воссоздают пустой файл с тем же именем.
Ну, я нашел решение, которое работает, хотя мне это действительно не нравится. Мне пришлось удалить файл .designer.cs, а затем создать пустой файл с тем же именем. Когда я вернулся и снова сохранил файл aspx, файл конструктора был повторно сгенерирован.
Хитрая!
Я использую следующий метод, который работает каждый раз:
Рекомпилированные.
<name>.aspx.designer.vb
чтобы он заработал.
Недавно я увидел, что у меня такая же проблема. 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, сохраните, а затем верните.
Есть и другая возможность: у вас может быть ошибка в вашем .aspx файле, который не позволяет Visual Studio регенерировать конструктор.
Если вы переключитесь на Design View, он отобразит элемент управления как неспособный к визуализации. Фиксация элемента управления (в моем случае это была дополнительная цитата в свойствах), и перекомпиляция должна регенерировать конструктора.
Большинство решений здесь не работают, если вы используете Visual Studio 2013 и, возможно, 2012 год. Microsoft, вероятно, ввела некоторые оптимизации, чтобы сделать среду IDE более свежей, следовательно, они уменьшили количество случаев, запускающих генератор кода. Следующие сценарии, которые раньше работали, больше не выполняются:
Решение удивительно просто, но оно немного громоздко. Чтобы запустить генератор кода, измените что-то, что потребует создания designer.aspx.cs. Изменение содержимого, которое не влияет на код, например стиль CSS или добавление текста, не вызывает генерацию кода. Вы должны изменить ссылочный элемент управления. Вот как это сделать:
В ascx или aspx измените идентификатор элемента управления
<asp:HyperLink ID="MyLink" runat="server" NavigateUrl="~/Default.aspx" Text="Home" />
to
<asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />
Перейдите к ascx.cs или aspx.cs и убедитесь, что вы переименовали все ссылки на "MyLink" на "theLINK". Сохраните и выполните сборку, и вам должно быть хорошо идти.
Единственный способ, которым я знаю, - удалить файл-конструктор и сделать конвертирование в веб-приложение. Однако, когда вы это делаете, он обычно появляется с ошибкой, почему он не авторегенерирует в первую очередь, обычно это элемент управления ref, который не объявлен в начале страницы.
Преобразование в веб-приложение не помогло мне.
Удаление конструктора и вставка пустого конструктора .cs тоже не работали.
Но да, это сработало:
Готово. Создан новый designer.cs.:)
Я часто обнаружил, что копирование/вставка вызывает это поведение для меня. Большинство случаев можно решить, отредактировав идентификатор серверного элемента управления (просто добавьте символ, а затем удалите его).
Также помните, что элемент управления внутри таких вещей, как ретрансляторы, не отображается в файле конструктора.
И да, есть случаи, когда вам нужно сделать магию с удаленным файлом, указанную выше, но решение по изменению имени будет работать большую часть времени.
Я нашел способ решить эту проблему без изменения каких-либо кодов или запущенных команд, таких как "Конвертировать в веб-приложение", - и это тоже просто!
Я обнаружил, что перезапуск Visual Studio часто решает проблему, но иногда это не так. В этих случаях, если вы закроете Visual Studio, а затем удалите весь контент в каталоге "obj" для веб-проекта, прежде чем открывать его снова, он всегда работал у меня.
(при повторном запуске вы просто добавляете пробел и удаляете его снова, а затем нажмите "Сохранить", чтобы файл конструктора был правильно регенерирован)
Когда вы находитесь в режиме просмотра, щелкните правой кнопкой мыши на экране и нажмите "Обновить".
Мой опыт в том, что если вы хотите сделать что-то вроде этой, как указано выше.
Ваш файл разметки (aspx/ascx) должен включать атрибут CodeBehind = MyPage.aspx.cs или иначе он не будет работать. Я написал об этом здесь.
(Ниже приводится опыт работы с VS2005.)
Если вы редактируете страницу ASPX во время отладки, тогда код не обновляется новыми классами. Итак, вам нужно прекратить отладку, тривиально отредактировать страницу ASPX (например, добавить кнопку или что-то еще), затем щелкнуть Design View, а затем удалить кнопку. Затем ваши файлы дизайнеров должны быть обновлены.
Если у вас другая проблема с VS2008, я не могу помочь.
В Visual Studio:
1) Удалите файл aspx.designer.cs
2) Щелкните правой кнопкой мыши по вашему aspx файлу и выберите "Преобразовать в веб-приложение" Это должно добавить aspx.designer.cs обратно и обновляться.
Если вы получите сообщение об ошибке:
"Сбой создания файла конструктора: метод или операция не реализованы".
Попробуйте закрыть Visual Studio, а затем снова откройте свой проект и повторите шаг номер 2
Если вы используете VS2013 или новее, убедитесь, что код, на который ссылается атрибут "CodeBehind", а не "CodeFile", затем выполните шаги ниже
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
TL; DR;
Отредактируйте атрибут Inherits
директивы ASPX page @Page
и нажмите "Сохранить" . Ваш файл дизайнера должен быть регенерирован.
Убедитесь, что Inherits
= <namespace> . <class_name > и CodeBehind
= <class_name > .aspx.cs
Я пытался сделать это в проекте Sharepoint 2010, используя VS 2010 и TFS, и ни одно из вышеперечисленных решений не работало для меня. Прежде всего, параметр "Преобразование в веб-приложение" отсутствует в меню правой кнопки мыши в файле .ASPX при использовании TFS в VS 2010.
Этот ответ помог окончательно. Мой класс выглядел так:
namespace MyProjects.Finance.Pages
{
public partial class FinanceSubmission : WebPartPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
// more code
}
}
И моя директива @Page
была (разрывы строк здесь для ясности):
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="FinanceSubmission.aspx.cs"
Inherits="MyProjects.Finance.Pages.FinanceSubmission"
MasterPageFile="~masterurl/default.master" %>
Сначала я изменил Inherits
на MyProjects.Finance.Pages, нажал кнопку "Сохранить" , а затем вернул его обратно в MyProjects.Finance.Pages.FinanceSubmission и снова нажмите "Сохранить" ., И стена! Страница дизайнера была обновлена!
Надеюсь, это поможет кому-то, кто использует TFS!
Я сталкивался с той же проблемой уже много лет, работая в Visual Studio 2008. И я пробовал каждое "решение" на StackOverflow и десятках блогов, точно так же, как я уверен, что у вас все есть. И иногда они работают, а иногда и нет, точно так же, как я уверен, все вы столкнулись. И, по-видимому, это все еще проблема в VS2010 и VS2012.
Итак, пару месяцев назад я решил, что этого достаточно, и через несколько недель я построил инструмент под названием "Редизайн", который генерирует файлы .designer. Это с открытым исходным кодом в соответствии с лицензией BSD, с исходным кодом, доступным на SourceForge, - бесплатным для использования, бесплатным, чтобы украсть, свободно делать все, что угодно. И это то, что Visual Studio не делает так часто, что быстро и надежно генерирует файлы .designer.
Это автономный инструмент командной строки, который анализирует файлы .aspx и .ascx, выполняет всю необходимую магию отражения и выплескивает правильные файлы .designer. Он делает все разбор и размышления, чтобы не полагаться на существующий код, который мы все знаем слишком хорошо, нарушен. Он написан на С# против .NET 3.5, но он пытается избежать использования даже System.Web для чего угодно, кроме объявлений типа, и он не использует или не полагается на Visual Studio вообще.
Редизайн может генерировать новые файлы .designer; и он предлагает вариант -verbose, так что, когда что-то пойдет не так, вы получите гораздо лучшие сообщения об ошибках, чем "Исключение типа System.Exception было брошено". И там есть опция -verify, которая может быть использована для того, чтобы сообщать вам, когда ваши существующие файлы .designer нарушены. Отсутствуют элементы управления, неправильные объявления свойств, нечитаемые Visual Studio, или иначе просто пропущены.
Мы использовали его на моем рабочем месте, чтобы вытащить нас из пробок в течение большей части последнего месяца, и, хотя Redesigner все еще является бета-версией, он достаточно далеко продвинулся вперед, чтобы поделиться своим существованием с общественностью, Я скоро намереваюсь создать для него плагин Visual Studio, поэтому вы можете просто щелкнуть правой кнопкой мыши, чтобы проверить или регенерировать файлы дизайнера так, как вы всегда хотели. Но в то же время использование командной строки довольно простое и сэкономит вам много головных болей.
Во всяком случае, перейдите к загрузке копии Redesigner и прекратите вытягивать свои волосы. Вам это не всегда понадобится, но когда вы это сделаете, вы будете рады, что у вас есть это!
Просто чтобы добавить к длинному списку ответов здесь - я только что столкнулся с этой проблемой в VS2010 (SP1) с .aspx файлом. Я попытался добавить и удалить стандартные элементы управления ASP (которые работали в прошлом), но в конце концов мне пришлось удалить одну из строк runat = server из существующего элемента управления (и сохранить), чтобы заставить файл конструктора для регенерации.
Вот что я пережил, Выберите папку веб-сайта правой кнопкой мыши в обозревателе решений, выберите "Преобразовать в веб-приложение" для всего файла aspx, созданный файл дизайнера будет создан.
Самир
в проводнике решений щелкните правой кнопкой мыши и выберите преобразование в веб-приложение. Он снова сгенерирует все файлы дизайнеров.
Еще одна вещь, которая работала -
<Compile Include="<Path>\FileName.ascx.designer.cs">
<DependentUpon>FileName.ascx</DependentUpon>
</Compile>
Это также может произойти, если вы обновите пространство имен и не обновляете пространство имен в файле конструктора. Исправить: обновить пространство имен в файле конструктора тоже.
Одна вещь, о которой никто не упоминал, - это посетить страницу. У меня был файл с прекращенным восстановлением, потому что я включил пользовательский элемент управления, которого не было (по разным причинам), и ни одна из предложенных здесь функций не работала. По какой-то причине я не получал никаких ошибок в Visual Studio, кроме тех, кто жаловался на то, что мои клиентские элементы управления не существовали, потому что они не были восстановлены, конечно.
Фактически посетил страницу, чтобы получить ASP.Net, чтобы сообщить мне об ошибке.
Если вы похожи на меня, и вы добавляете старые файлы .ASPX в более новый проект. Вероятно, вы забудете некоторые элементы управления, используемые на странице.
Если это так, во-первых, если есть несколько файлов, которые вы устанавливаете; Сначала закрепите по одному.
При компиляции исправить возникшие ошибки. Вероятно, они будут такими же ошибки во всех файлах.
Затем, если у вас есть файлы конструктора, удалите все файлы вставленных - конструкторов. Затем убедитесь, что при компиляции других ошибок нет, кроме файлы конструктора.
Наконец, щелкните правой кнопкой мыши ваш веб-проект и нажмите "Преобразовать в веб-приложение". Это введет нужные вам файлы дизайнеров.
Это самые лучшие шаги для устранения проблем.
У меня было две проблемы... устаревший AJAXControlkit - удалил старую dll, удалил старые элементы управления из панели инструментов, загрузил новую версию, загрузил toolbox и перетащил новые элементы управления на страницу (см. http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Studio_.NET_2005/Q_24591597.html)
Также имел орфографию в моем контроле над меткой (использовал "класс" вместо "cssclass" ).
Та
Это ошибка в среде IDE; Я видел это с VS 2003 года. Решение просто, но.
Сохраните ваши файлы. Полностью выйти из среды IDE (убедитесь, что процесс остановлен, задача mgr.)
Заново откройте решение, загрязните разметку, сохраните. Фиксированный.
Удалите файл designer.cs и щелкните правой кнопкой мыши на файле .aspx и выберите "Преобразовать в веб-приложение". Если есть проблемы с вашими объявлениями управления, например тегом, который не является хорошо сформированным, вы получите сообщение об ошибке, и вам нужно будет исправить неверный тег, прежде чем visual studio сможет успешно сгенерировать файл вашего дизайнера.
В моем случае, на данный момент, я обнаружил, что проблема заключалась в том, что я объявила элемент управления кнопки, который не был внутри тега формы с атрибутом runat = "server".
Закрыть designer.cs.
Измените файл aspx для просмотра.
Щелкните правой кнопкой мыши → Обновить.
Сохранить
Я думал, что у меня есть эта проблема, и вырвал мои волосы, но потом я понял, что пытаюсь ссылаться на элемент управления из статического метода.
Создание метода нестатического разрешения проблемы для меня.
Для VS2015... здесь приведен пример VB для перехода от проекта WebSite к проекту веб-приложения, который работал у меня. Ни один из других решений не работал у меня, поэтому я делюсь этим. Это не изящно, но работает.
Шаг 0: Заменить все "CodeFile =" на "CodeBehind =" в вашем проекте Шаг 1: Закройте решение. Шаг 2. Запустите домашнее приложение Windows со следующим кодом (ниже шаги). Шаг 3: Повторно откройте решение. Шаг 4. В обозревателе решений убедитесь, что вы показываете все файлы, и выполните поиск конструктора .vb(или designer.cs для С#). Шаг 5: выберите все недостающие файлы и включите их в свой проект. Шаг 6: Для каждого файла просмотрите главную страницу/элемент управления и сохраните его.
private void button1_Click(object sender, EventArgs e)
{
ProcessDirectory(new DirectoryInfo(textBox1.Text));
}
private void ProcessDirectory(DirectoryInfo directory)
{
ProcessMask(directory, ".ascx", ".vb");
ProcessMask(directory, ".aspx", ".vb");
foreach (DirectoryInfo directoryInfo in directory.GetDirectories())
ProcessDirectory(directoryInfo);
}
private void ProcessMask(DirectoryInfo directory, string maskStart, string maskEnd)
{
FileStream fs;
foreach (FileInfo file in directory.GetFiles(string.Format("*{0}{1}", maskStart, maskEnd)))
{
string designerFileName = file.Name.Replace(string.Format("{0}{1}", maskStart, maskEnd), string.Format("{0}.designer{1}", maskStart, maskEnd));
if (directory.GetFiles(designerFileName).Length == 0)
{
using (fs = File.Create(Path.Combine(directory.FullName, designerFileName)))
{
fs.Close();
}
}
}
}
Я нахожусь в VS 2003, и никто из них не работал у меня. Что работало, так это открыть код в верхней части страницы .vb в разделе "Созданный конструктор веб-форм" (часть, в которой говорится, что там не нужно редактировать) и объявить его там, где система объявила все остальные элементы управления. Bizzare.
Я знаю, что это старая тема, но я просто хотел добавить решение, которое еще не было предложено.
У меня была такая же проблема с файлом ресурсов. Я отредактировал его вне Visual Studio, и файл дизайнера не обновился должным образом.
Переименование файла помогло восстановить файл конструктора. Я только что переименовал его в первоначальное имя, и это сработало просто отлично!
Решение для меня:
Я только что скопировал страницу и вставил ее в ту же часть, а затем переименовал первую страницу (то, что когда-либо) и переименовал скопированную страницу в качестве исходной страницы. Теперь элементы управления доступны.
У меня возникла проблема с тем, что мои новые элементы управления не будут генерироваться в файле конструктора при объявлении в файле .ascx. Проблема заключалась в том, что я объявил их также в коде. Таким образом, удаление декларации в коде позади проблемы.
Я знаю, что опаздываю на вечеринку, но я подумал, что если вы попробуете принятый ответ от @Glenn Slaven и нынешний наивысший рейтинг от @Espo, вам все равно не повезло, следующее может спасти некоторых людей некоторые проблемы.
Пользовательские элементы управления (.ascx) - это то, что постоянно останавливает автогенерирование для меня. Я обнаружил, что в тех случаях, когда я использую другие User Control в своем User Control, он прерывает автоматическое поколение.
Решение, с которым я столкнулся, состояло в том, чтобы использовать трюк, который все мы знаем, для того, чтобы IntelliSense работал в файлах User Controls или Skin при использовании классов CSS из внешних источников. Вместо того, чтобы просто ссылаться на файл CSS, теперь я зарегистрирую другие пользовательские элементы управления, которые мне нужны. Это выглядит примерно так:
<% If False Then %>
<%@ Register TagPrefix="uc" TagName="Title" Src="~/controls/title.ascx" %>
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<% End If %>
После этого я сохраняю файл, который запрашивает автогенерацию для регенерации, и я снова работаю.
В моем случае это было исправлено, когда я добавил CodeBehind в раздел @Page.
Помимо всех хороших ответов, уже предоставленных, я хотел бы добавить к @johan-leino отличный ответ. В моем случае, по какой-то произвольной причине, атрибут CodeBehind
был опущен из файла директивы @Page
/.aspx. Аналогично, может быть полезно проверить атрибут CodeFile
для директив @Control
директив /.ascx(очевидно, в сочетании с атрибутом Inherits
в обоих случаях).
В зависимости от точного сценария и причины, требуемых для "принудительного" регенерации .designer.cs, можно также попытаться отформатировать документ (потенциально указывающий на ошибку синтаксического анализа) до (быстрого) сохранения (независимо от того, были ли какие-либо изменения или нет) и проверьте список ошибок для предупреждений.
У меня была эта проблема много, и я снова сделал это. Я попытался исправить это, используя эти предложения, и ничего не получилось. Наконец, я обнаружил, что атрибут "Заголовок" в заголовке страницы дважды (я добавил в конец, не понимая, что VS добавил пустой заголовок = "" в начало) - удаление дополнительного атрибута, вызвавшего повторное создание VS2008 файл конструктора... Надеюсь, VS2010 устранит эту проблему, сообщив нам, почему создание файла конструктора не происходит...
- Дерек
У меня была эта проблема раньше. Обычно я просто нажимаю Enter, чтобы добавить строку, а затем дождаться появления плюса/минуса на странице html, и разработчик должен добавить то, что вам нужно. Мне также пришлось закрыть проект и снова открыть его, чтобы он работал.
В моем случае у меня просто отсутствовал регистр TagPrefix вверху. Как-то предыдущий разработчик работал без этого?
У меня была эта проблема, и для меня у меня было место в одном из значений идентификатора для одного из моих элементов управления. Я забрал пространство, и файл конструктора восстановил себя.