Пользовательский контроль всегда сбой 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 ненавидит меня.