Невозможно отобразить конструктор для этого файла, поскольку ни один из классов в нем не может быть разработан - PullRequest
32 голосов
/ 13 июля 2011

У нас есть следующий общий компонент:

public class OurServiceBase : System.ServiceProcess.ServiceBase

У этого класса есть функциональные возможности, которые нам нужны во всех наших последующих службах, такие как стандартизированные функции планирования выполнения и ведения журнала.

В новый проект добавляю следующее:

public class MyService : System.ServiceProcess.ServiceBase

В Windows Designer класс отображается правильно.

Когда я меняю сервис на производный от OurServiceBase

public class MyService : OurSharedLibrary.OurServiceBase

Дизайнер перестает работать:

Error screenshot

Полная ошибка: Невозможно отобразить конструктор для этого файла, поскольку ни один из классов в нем не может быть спроектирован. Разработчик проверил следующие классы в файле: EmailProcessor --- Не удалось загрузить базовый класс «OurSharedLibrary.CienaServiceBase». Убедитесь, что на сборку ссылались и что все проекты построены.

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

Любые предложения приветствуются.

Немного больше информации - стек вызовов от дизайнера, когда он выдает ошибку о невозможности спроектировать производную службу:

at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host) 

7/19/2011 14:34 EDT Новое открытие.

Класс "OurServiceBase" существует в отдельном проекте (обычно упоминается только как DLL). По какой-то причине я скопировал файл базового класса в свой проект, собрал и открыл конструктор. Это сработало! Когда я снова удалил файл базового класса и вернулся к ссылке на внешнюю DLL, конструктор снова сломался.

Ответы [ 6 ]

63 голосов
/ 03 ноября 2014

Вы также можете попробовать сделать это:

  • Закрыть все страницы дизайна пользовательского интерфейса
  • Чистый раствор
  • Строительное решение
  • Открыть нужные страницы дизайна пользовательского интерфейса

Это может или не может помочь, но это, безусловно, решило ту же проблему в моем проекте.

6 голосов
/ 20 июля 2011

Лучше всего начать с версии OurServiceBase без функциональности и посмотреть, сможете ли вы разработать MyService. Если так, то медленно добавляйте обратно функциональность, пока она не сломается.

Так как похоже, что Visual Studio имеет проблему с сериализацией одного из членов OurServiceBase.

4 голосов
/ 02 мая 2014

На тот случай, если кому-то вроде меня придется работать над старым проектом на Visual Studio 2008 и столкнуться с той же проблемой.

Вероятно, потому, что путь проекта содержит несколько экзотических символов, таких как C#

Пример, мой путь выглядит так:

C: \ Проекты \ C # \ имя_проекта ...

Когда он переименован в

C: \ Проекты \ CSharp \ имя_проекта ...

Visual Studio теперь может распознавать родительский класс и затем открывать форму с унаследованной формой.

3 голосов
/ 30 марта 2019

Вот еще одно возможное решение:

В свойствах проекта при сборке для моей платформы было установлено значение x64. Я обновил это значение до «Любой процессор», перестроил свой проект, и дизайнеры открыли его нормально.

Это объясняет это лучше: Visual Studio Designer в x64 не работает

2 голосов
/ 02 июля 2015

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

1 голос
/ 10 ноября 2016

У меня было решение с 2 проектами (один ссылается на другой), и я только что настроил один на целевой .Net 4.5.2, а другой нацелился на 4.5.

Совет: просмотреть предупреждения в списке ошибок:

Произошло несоответствие между процессорной архитектурой строящегося проекта "MSIL" и процессорной архитектурой из ссылок "C: .... dll", "x86". Это несоответствие может привести к сбоям во время выполнения. Рекомендуется изменить архитектуру целевого процессора вашего проекта с помощью Configuration Manager, чтобы согласовать архитектуры процессора между вашим проектом и ссылками, или взять зависимость от ссылок с архитектурой процессора, которая соответствует целевой архитектуре процессора вашего проекта.

...