VS 2010 - Ошибка при открытии User Control/Form with Designer
С#, VS2010, приложение WinForm:
Иногда у меня возникает проблема с получением сообщения об ошибке при открытии некоторых из моих элементов управления/форм. Все компиляции кода и приложение работают правильно. Открытие контроля в дизайнере дает мне:
Дизайнерский загрузчик не предоставил корневой компонент, но не указал почему.
Из моего опыта я могу сказать, что обычно в моем коде что-то не получается правильно инициализироваться, например. свойство не установлено, которое как-то доступно во время выполнения, но не при открытии с помощью конструктора. Единственная проблема заключается в том, что основную причину трудно найти.
Q: Есть ли шанс каким-то образом использовать отладчик, когда дизайнер открывает мой компонент в Visual Studio 2010? Это очень помогло бы, и проблема решения, скорее всего, была бы вопросом минут.
Примечание. Просто, чтобы это было ясно, я знаю, как использовать отладчик;-), я только понятия не имею, как я мог сказать, что дизайнер VS2010 должен открыть мой контроль в режиме отладки.
По состоянию на 2-й SEP 2010 добавлено:
Спасибо за вашу помощь. В основном это статья библиотеки MSDN, описывающая, как это сделать.
- Мне удалось настроить его и запустить второй экземпляр
(было мало чего понять, как это сделать).
- В моем случае это терпит неудачу, потому что второй экземпляр VS2010 (отладка времени разработки) не находит
символы для моего пользовательского элемента управления. Я добавил символы вручную в разделе "Отладка/символы". нет
результат, по-прежнему "Точка останова не будет удалена из-за недостающих символов"
BTW, используя этот подход, полезно исключить некоторые вещи из загрузки символов (через окно модулей), потому что это будет безопасно много времени.
Теперь, если нужно выяснить, как получить символы, и затем я могу решить проблему.....
Ответы
Ответ 1
Подавляющее большинство проблем времени разработки с настраиваемыми элементами управления вызвано кодом в обработчиках событий или переопределении метода в вашем элементе управления, выполняемом во время разработки, а также время выполнения. Обычно это желательно, вы получаете мгновенную обратную связь при изменении свойства в окне свойств, например.
Но не желательно, когда код зависит от того, что доступно во время выполнения, но не для времени разработки. Как соединение dbase или файл, который хранится в папке сборки. Это может генерировать исключения, и Visual Studio не очень надежна против обработки исключений во время разработки. В худшем случае вы можете свернуть VS на рабочий стол без какой-либо диагностики. Но все возможно.
Просмотрите код в своем элементе управления и убедитесь, что биты кода, которые должны выполняться только во время выполнения, завернуты следующим образом:
if (!DesignMode) {
// etc..
}
Жесткие случаи могут быть диагностированы с советами по отладке в этой статье библиотеки MSDN.
Ответ 2
Чтобы отладить ваш элемент управления в режиме разработки, вам нужны два экземпляра Visual Studio. В первом случае откройте проект, содержащий этот исходный код управления. В свойствах проекта, отладчике задайте командную строку, которая вызывает другой экземпляр Visual Studio (msdev? Не знаю точно для VS2010 - возьмите его из ярлыка), затем выполните команду "Начать отладку". Другой экземпляр Visual Studio запускается. В этом случае открытый проект клиента, который использует ваш контроль над формой.