Пользовательский контроль всегда сбой Visual Studio
Я пытаюсь открыть пользовательский элемент управления в одном из наших проектов. Он был создан, я считаю, в VS 2003, и проект был преобразован в VS2008. Я могу отлично просматривать код, но когда я пытаюсь загрузить представление конструктора, VS перестает отвечать на запросы, и я должен закрыть его с помощью диспетчера задач. Я попытался оставить его в течение нескольких минут, но он ничего не делает. Я запускал "devenv/log", но не видел ничего необычного в журнале. Я не могу найти конкретное сообщение об ошибке в любом месте. Любая идея, что может быть проблемой? Есть ли облегченный режим редактирования, который я мог бы использовать или что-то еще?
Причина, по которой мне нужно взглянуть на визуальное представление этого элемента управления, - это решить, где вставить некоторые новые компоненты.
Я пробовал искать его и искать SO, но либо я не знаю, что искать, либо там ничего нет. Любая помощь приветствуется.
(Самое странное, что пользовательский элемент управления, похоже, отлично загружается в другом проекте, который ссылается, но VS падает, как только я даже так сильно, как нажимаю на него в этом проекте.)
ИЗМЕНИТЬ
Пользовательский элемент управления является оболочкой стороннего редактора HTML... так что не совсем то, что обращается к базе данных.
Я просто попытался поместить элемент управления в новый проект, и он разбился, как только я перетащил его в форму.
Ответы
Ответ 1
Я решил мой разрушительный дизайнер, используя описанные здесь методы:
Хороший способ отладки ошибок конструктора Visual Studio
Мне удалось отладить некоторые проблемы конструктора элементов управления, запустив второй экземпляр VS, а затем из вашего первого экземпляра VS выполните команду "Отладка → Прикрепить к процессу" и выберите "devenv".
и
Кажется, что метод Load() UserControls каким-то образом анализируется дизайнером. Ввод инициализации и другого подозрительного кода в if-loop - проверка на IsDesignMode позволяет разработчику читать код, который приведет к его краху....
- обновление: оглядываясь назад, все самое главное, когда я передумал/реорганизовал дизайн приложения.
Ответ 2
Пользовательский элемент управления может иметь свойство, написанное следующим образом:
private int myPropName; // note the lowercase m
public int MyPropName { get { return MyPropName; } } // the property is returned
// instead of the variable
Обратите внимание, что значение, возвращаемое get, является самим свойством. Это приводит к сбою VStudio 2008 при попытке увидеть свойства элемента управления, что также происходит при добавлении элемента управления (путем перетаскивания) или к форме.
Как указано NickAldwin, это не создает предупреждения или ошибки компилятора.
Ответ 3
Повреждения, подобные этим, обычно связаны с сетью. Возможно, база данных. Вы должны следить за кодом, который запускается внутри UserControl во время разработки. Не только конструктор, но и событие Load, таймеры, OnHandleCreated, OnResize и т.д. Чтобы избежать запуска этого кода, проверяя свойство DesignMode, не делайте ничего опасного, если это правда.
Ваш окончательный отказ - отладить код во время разработки с помощью другого экземпляра Visual Studio.
Ответ 4
Чтобы следить за сообщением womb, я нашел следующий код, чтобы помочь и заблокировать VS от сбоя и чтения функции onLoad.
Я не могу ответить и не хочу добавлять новый комментарий. Вы можете использовать следующее в методе Load и остановить VS от его чтения и сбоя. Это было взято из этой статьи
bool isDesignMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName.IndexOf("devenv") != -1);
if (isDesignMode)
return;
Ответ 5
У меня была та же проблема. В моем случае проблема была (я думаю), что я инициализировал массив-член в объявлении, а не в конструкторе. Ошибка заключалась в том, что проект VisualStudio для моего приложения сразу же разбился, когда я попытался использовать пользовательский элемент управления из моей библиотеки с "плохим" объявлением.
Это расстраивало, потому что мой пользовательский компонент lib скомпилирован без ошибок.
Brooke
сбой:
class MyCustomObject: UserControl
{
private List<int> myList = new <int>List();
public MyCustomObject(){
InitializeComponent();
}
// other code here
}
решение
class MyCustomObject: UserControl
{
private List<int> myList;
public MyCustomObject(){
InitializeComponent();
myList= = new <int>List();
}
// other code here
}
Ответ 6
Мне помогает изменить целевую структуру из ".Net Framework 4 Client Profile" на ".Net Framework 4" в настройках проекта.
Ответ 7
Попробуйте закомментировать детали или даже полный конструктор элемента управления и посмотреть, появляется ли он. Возможно, это еще одна неудачная инициализация.
Ответ 8
После всего, что вы сделали, я также попытаюсь загрузить пользовательский элемент управления в совершенно новом проекте и посмотреть, правильно ли он загружается; и если да, то вы можете "решить, где вставить некоторые новые компоненты"... просто вслух!
Ответ 9
У меня были некоторые подобные проблемы при создании собственных пользовательских элементов управления в Visual Studio, но они были способны правильно отображать пользовательские элементы управления, выполнив следующие шаги:
- Сборка или восстановление проекта/решения
- Закройте Visual Studio и откройте его.
Это довольно простые вещи, которые, я уверен, вы уже пробовали. Просто выбросьте его там.
Ответ 10
Недавно у меня возникла раздражающая ошибка после создания пользовательского элемента управления и прикрепления его к форме через конструктор, визуальная студия 2010 всегда сбой при каждом режиме проектирования той же формы, где был установлен пользовательский элемент управления.
После создания так много раз и много экспериментов я решил свою проблему:
1 - Добавление нового файла class.cs в проект
2 - Перемещение всех вспомогательных классов, которые я добавил в пользовательский контроль
3 - Я думаю, что это более важно: перемещение всех пользовательских делегатов, которые проводят события в User_Control к недавно добавленному файлу.
4 - Удалено событие User_Control.Load.
Надеюсь, это поможет кому-то.
Приветствия
Ответ 11
Я столкнулся с этой проблемой. У меня есть один проект (ProjA), который содержит элементы управления пользователя и другой проект (ProjB), который ссылается на эти пользовательские элементы управления. Я обнаружил, что каждый раз, когда я пытаюсь добавить определенный пользовательский элемент управления, среда vb.net отключается и перезагружает мое решение.
Однако, если я прокомментирую код, содержащийся в моем контроле событие LOAD
Private Sub SampleDisplayBox_Load(sender As Object, e As EventArgs) Handles Me.Load
'AddHandler Sample.Sample_Reloaded, AddressOf reload
'AddHandler Sample.Sample_Cleared, AddressOf SampleCleared
'AddHandler My.Settings.SettingsSaving, AddressOf UpdateColors
'UpdateColors()
'reload()
End Sub
а затем перестроить мое решение, я не сталкиваюсь с проблемами при добавлении этого элемента управления в форму. Очень странно, что эта проблема возникает только в одном элементе управления, когда у меня есть 7 других элементов управления в том же проекте, что все функции одинаковы без ошибок.
Лично я считаю, что VB.NET ненавидит меня.