Не удалось загрузить форму VB.Net: «Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))» - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь обновить старое приложение VB.NET (которое в настоящее время работает на Windows XP) до Windows 10. Я сделал автоматическое обновление с VS2010 до проекта VS2017, но когда я пытаюсь открыть одно из формы, я получаю сообщение об ошибке в конструкторе:

Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) Случаи этой ошибки (8)

в System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance (Guid & clsid, объект punkOuter, контекст Int32, Guid & iid) в System.Windows.Forms.AxHost.CreateInstanceCore (Guid clsid) в System.Windows.Forms.AxHost.CreateInstance () в System.Windows.Forms.AxHost.GetOcxCreate () в System.Windows.Forms.AxHost.set_Site (значение ISite) в System.ComponentModel.Container.Add (компонент IComponent, имя строки) в System.ComponentModel.Design.DesignerHost.PerformAdd (компонент IComponent, имя строки) в System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent (Type componentType, String name) в System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance (Тип типа, аргументы ICollection, имя строки, логическое значение addToContainer). в System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstanc> e (тип type, аргументы ICollection, строковое имя, логический addToContainer) в System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeInstance (менеджер IDesignerSerializationManager, тип Type, параметры Object [], имя строки, логическое addToContainer) в System.ComponentModel.Design.Serialization.ComponentCodeDomSerializer.DeserializeInstance (менеджер IDesignerSerializationManager, тип Type, параметры Object [], имя строки, логическое значение addToContainer) в System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression (менеджер IDesignerSerializationManager, имя строки, выражение CodeExpression) в System.ComponentModel.Design.Serialization.CodeDomSerializer.DeserializeStatementToInstance (менеджер IDesignerSerializationManager, инструкция CodeStatement) в System.ComponentModel.Design.Serialization.CodeDomSerializer.Deserialize (менеджер IDesignerSerializationManager, объектный код объекта) в System.Windows.Forms.Design.ControlCodeDomSerializer.Deserialize (менеджер IDesignerSerializationManager, объект codeObject) в System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.DeserializeName (менеджер IDesignerSerializationManager, имя строки, операторы CodeStatementCollection)

Я обнаружил пару связанных проблем (например, здесь и здесь ), все из которых говорят, что мне нужно зарегистрировать некоторый компонент COM / ActiveX.

У меня вопрос, как мне найти компонент, нарушающий работу? Информация об исключении не указывает его GUID.

Пока я пробовал:

  • установить цель на x86
  • regsvr32

1 Ответ

0 голосов
/ 07 января 2019

Во-первых, это не похоже на то, что вы создали его с помощью pdb, это должно быть вашим первым шагом, посмотрите, не дает ли он вам номер строки. Если это не сработает, вам придется открывать файл * .design.vb, вручную удаляя файлы, пока вы не получите эту ошибку.

По сути, это немного утомительно, но не сложно, если вы понимаете, как все происходит в конструкторе - в основном это просто другой класс и все, что он делает, вы можете делать вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...