Crazy VS Ошибки дизайнера - PullRequest
3 голосов
/ 16 марта 2010

Вот странный.

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

Я начал отменять свои изменения, чтобы вывести проблему. Теперь я полностью вернулся к последнему коммиту - в котором я знаю форма работала в конструкторе - очистил решение и удалил папки bin / и obj /, а также * .suo файл для хорошей меры.

Форма по-прежнему не отображается в конструкторе.


Вот ошибки, которые он выдает:

  1. Не удалось найти 'MyNamespace.MyControl'. Пожалуйста, убедитесь, что ссылка на сборку, которая содержит этот тип. Если этот тип является частью вашего проекта разработки, убедитесь, что проект был успешно собран.
  2. Переменная 'myControl1' либо необъявлена, либо никогда не назначалась.

Переменная и объявлена, и назначена, и MyControl прекрасно работает (опять же, форма отлично работает, когда программа действительно запущена). Еще страннее, если я пытаюсь создать новую форму и перетащить на нее MyControl, я получаю эту ошибку Entity-Framework:

Не удалось создать компонент MyControl. Сообщение об ошибке следующее: 'System.ArgumentException: указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недопустимо. в System.Data.EntityClient.EntityConnection.ChangeConnectionString (String newConnectionString) в System.Data.EntityClient.EntityConnection..ctor (String connectionString) в System.Data.Objects.ObjectContect.CreateEntityConnection (String connectionString) и т. д.

В моей строке подключения нет ничего плохого: она работала раньше, и, опять же, она работает, когда я фактически запускаю программу (элемент управления уже существует в старой форме из предыдущего коммита).


Любые идеи вообще? Я в полном недоумении.


[Изменить] Единственный значимый код:

MyControl.cs
public MyControl()
{
    _entities = new MyEFEntities(); //Entity-framework generated class
}

MyForm.Designer.cs
private void InitializeComponent()
{
    this.myControl1 = new MyNamespace.MyControl();
    ...
    this.Controls.Add(this.myControl1);
}

MyEFDatabase.Designer.cs
public MyEFEntities() : base("name=MyEFEntities", "MyEFEntities") { ... }

App.Config
<connectionStrings>
    <add name="MyEFEntities" connectionString="metadata=res://*/MyEFDatabase.csdl|res://*/MyEFDatabase.ssdl|res://*/MyEFDatabase.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDatabaseServer;Initial Catalog=MyDatabase;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

Я попробовал "заменить &quot; на '" трюк - не помогло.


[Edit2] Это происходит и с новыми проектами, но не сразу. Только после того, как немного поигрался (это имеет отношение к добавлению отношения «многие к одному», которое EF не выяснило само по себе), но я не могу понять точные шаги для воспроизведения.

Ответы [ 5 ]

2 голосов
/ 17 марта 2010

Я бы предложил закрыть все открытые формы в режиме конструктора; перестроить все, а затем посмотреть, работают ли они, когда вы снова откроете конструктор форм - в прошлом у меня были проблемы, когда не удалось сгенерировать библиотеку элементов управления, поскольку она была заблокирована в памяти (дизайнером форм).

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

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

Единственный обходной путь - создать EF_Entities внутри формы и передать его в качестве параметра в элемент управления.

Этот обходной путь больше не работает, если параметр является членом родительского элемента управления, т.е. MyChildControl: MyParentControl, MyParentControl: UserControl, EF_EntitiesParameter член MyParentControl. Конструктор вылетает с ошибкой «Ссылка на объект не установлена ​​на экземпляр объекта»; Дальнейшая проверка показывает, что дизайнер выполняет код, для которого требуется EF_EntitiesParameter, который по какой-то причине имеет значение null (он корректно устанавливается в конструкторе формы и отлично работает при фактическом запуске).

Обходной путь для этой проблемы состоит в том, чтобы запретить запуск в конструкторе всего кода, который требует использования EF_EntitiesParameter (см. Обходные пути здесь )

0 голосов
/ 17 марта 2010

Успешно ли вы построили свой проект с тех пор, как изменили название класса? Конструктор может загружать компоненты только из встроенных сборок.

РЕДАКТИРОВАТЬ: еще одна вещь, чтобы проверить это размер файла .resx. Иногда я обнаруживаю, что мой файл обрезан, и мне приходится удалять его или восстанавливать из системы контроля версий.

0 голосов
/ 16 марта 2010

Вы пытались исключить / включить оскорбительную форму из проекта? Это работало для меня в прошлом.

0 голосов
/ 16 марта 2010

Вы пытались удалить файл designer.cs, затем щелкнуть правой кнопкой мыши на странице aspx и выбрать «Преобразовать в веб-приложение?» Он повторно генерирует файл конструктора и обычно работает для меня, когда у меня возникают странные дизайнерские проблемы.

...