Пользовательский элемент управления всегда дает сбой Visual Studio - PullRequest
11 голосов
/ 19 апреля 2010

Я пытаюсь открыть пользовательский элемент управления в одном из наших проектов. Он был создан, я думаю, в VS 2003, и проект был преобразован в VS2008. Я могу нормально просматривать код, но когда я пытаюсь загрузить представление конструктора, VS перестает отвечать, и мне приходится закрывать его с помощью диспетчера задач. Я пытался оставить его работать в течение нескольких минут, но он ничего не делает. Я запустил "devenv / log", но не увидел ничего необычного в журнале. Я не могу найти конкретное сообщение об ошибке нигде. Есть идеи, в чем может быть проблема? Могу ли я использовать облегченный режим редактирования или что-то в этом роде?

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

Я пытался поискать его в Google и поискать ТАК, но либо я не знаю, что искать, либо ничего об этом нет. Любая помощь приветствуется.

(Самое странное, что пользовательский элемент управления нормально загружается в другом проекте, который ссылается, но VS падает, как только я даже щелкаю по нему в этом проекте.)

EDIT

Пользовательский элемент управления является оберткой стороннего редактора HTML ... поэтому он не совсем то, что обращается к базе данных.

Я просто попытался поместить элемент управления в новый проект, и он потерпел крах, как только я перетащил его в форму.

Ответы [ 11 ]

14 голосов
/ 11 июля 2011

Я решил свой сбойный конструктор, используя методы, описанные здесь:

Хороший способ отладки ошибок Visual Studio Designer

Мне удалось отладить некоторые проблемы конструктора элементов управления, запустив второй экземпляр VS, затем из вашего первого экземпляра VS выполните «Debug -> Attach to Process» и выберите «devenv».

И

Кажется, что метод Load () в UserControls каким-то образом анализируется дизайнером. Помещение инициализаций и другого подозрительного кода в проверку цикла if для IsDesignMode удерживает конструктор от чтения кода, который может его вызвать сбой ....

- обновление: оглядываясь назад, все большинство вещей было решено, когда я продумал / переработал дизайн приложения.

11 голосов
/ 26 августа 2010

Ваш пользовательский элемент управления может иметь свойство, написанное так:

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 голосов
/ 19 апреля 2010

Такие зависания обычно связаны с сетью. База данных возможно. Вы должны следить за кодом, который запускается внутри UserControl во время разработки. Не только конструктор, но и событие Load, таймеры, OnHandleCreated, OnResize, и так далее. Чтобы избежать запуска этого кода, протестируйте свойство DesignMode, не делайте ничего опасного, когда оно истинно.

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

2 голосов
/ 13 октября 2012

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

Я не могу ответить и не хочу добавлять новый комментарий. Вы можете использовать следующие в методе Load и остановить VS от чтения и сбоя. Это взято из этой статьи

bool isDesignMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName.IndexOf("devenv") != -1);
            if (isDesignMode)
                return;
1 голос
/ 07 декабря 2012

Мне помогает изменить Target Framework с «.Net Framework 4 Client Profile» на «.Net Framework 4» в настройках проекта.

1 голос
/ 20 июня 2011

У меня была такая же проблема. В моем случае проблема заключалась в том (я думаю), что я инициализировал массив элементов в объявлении, а не в конструкторе. Ошибка состояла в том, что проект VisualStudio для моего приложения немедленно потерпел крах, когда я попытался использовать пользовательский элемент управления из моей библиотеки, у которого было «плохое» объявление.

Это было неприятно, потому что моя библиотека пользовательских компонентов была скомпилирована без ошибок.

Brooke

код, который вылетел:

class MyCustomObject: UserControl
{
  private List<int> myList = new <int>List();
   public MyCustomObject(){
      InitializeComponent();
     }

// other code here
} 

Решение * * +1010

class MyCustomObject: UserControl
{
   private List<int> myList;
   public MyCustomObject(){
        InitializeComponent();
        myList= = new <int>List();
     }

// other code here
} 
0 голосов
/ 20 июня 2013

Я тоже сталкивался с этой проблемой. У меня есть один проект (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 ненавидит меня.

0 голосов
/ 07 ноября 2012

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

После многих экспериментов я решил свою проблему:

1 - Добавление нового файла class.cs в проект 2 - Перемещение всех дополнительных классов, которые я добавил, в сам пользовательский элемент управления 3 - я думаю, что это более важно: перемещение всех пользовательских делегатов, которые связывают события в User_Control, во вновь добавленный файл. 4 - Удалено событие User_Control.Load.

Надеюсь, это кому-нибудь поможет.

Приветствия

0 голосов
/ 22 апреля 2010

У меня были некоторые похожие проблемы при создании собственных пользовательских элементов управления в Visual Studio, но я смог заставить их отображаться правильно, выполнив следующие действия:

  1. Сборка или перестройка проекта / решения
  2. Закройте Visual Studio и снова откройте его

Это довольно простые вещи, которые, я уверен, вы уже пробовали. Просто выбрасываю это туда.

0 голосов
/ 19 апреля 2010

После всего, что вы сделали, я бы также попытался загрузить пользовательский элемент управления в совершенно новый проект и посмотреть, правильно ли он загружается; и если да, то вы можете " решить, куда вставить новые компоненты " ... просто подумать вслух!

...