Конструктор форм не видит базовый класс

139
07 декабря 2019, 09:20

Имеется базовый класс для формы и собственно форма, которая его наследует:

// BaseForm.cs
public class BaseForm : Form, INotifyPropertyChanged {
    public BaseForm() {}
}
// Form_Main.cs
public partial class Form_Main : BaseForm {
    public Form_Main() {}
}
// Form_Main.Designer.cs
// Code automatically generated by Windows Form Designer
partial class Form_Main {
    private System.ComponentModel.IContainer components = null;
    protected override void Dispose(bool disposing){}
    private void InitializeComponent(){}
}

Используется Visual Studio Professional 15.9.9. Для экономии места свойства, поля и реализация методов опущена. Файл Form_Main.Designer.cs не редактировался и полностью сгенерирован конструктором форм. Всё работает нормально пока целевая платформа проекта не меняется с AnyCPU или x86 на x64. После сборки проекта и попытки открыть визуальный конструктор форм появляется ошибка:

Показать конструктор для этого файла невозможно, так как невозможно сконструировать ни один из входящих в него классов. Конструктор проверил следующие классы в этом файле: Form_Main --- Невозможно загрузить базовый класс 'MyNamespace.BaseForm'. Проверьте, что есть ссылка на сборку и все проекты созданы.
StackTrace: System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)

Не смотря на ошибку проект компилируется, запускается, работает как ожидается и единственная проблема в визуальном редакторе. На данный момент приходится перед редактированием формы переключать целевую платформу на AnyCPU или на x86, затем перекомпилировать, и после окончания редактирования формы проделывать тоже самое в обратном порядке. Было подозрение, что такое поведения может быть связано с различными путями для результирующих файлов (например: bin/Debug и bin/x64/Debug), но после установки одинаковых путей проблема не решилась.

С чем может быть связана эта ошибка? Можно ли её исправить? Всё ли я делаю правильно?

Answer 1

Вот что отвечает Microsoft по этому поводу:

The WinForms designer works in a 32-bit devenv process and therefore cannot load 64-bit components.
We suggest you use this solution: Design your app with the "Any CPU" option. This will cause your code to 32-bit on 32-bit platforms and 64-bit on 64-bit platforms. The designer will work in "Any CPU". When you need to debug 64-bit specifically, switch your build configuration to 64-bit (but you must switch back to "x86” or "Any CPU" do form design).

Автоматический перевод:

Дизайнер WinForms работает в 32-битном процессе devenv и поэтому не может загружать 64-битные компоненты.
Мы предлагаем вам использовать это решение: создайте свое приложение с опцией "AnyCPU". Это сделает ваш код 32-битным на 32-битных платформах и 64-битным на 64-битных платформах. Дизайнер будет работать в "AnyCPU". Когда вам нужно конкретно отладить 64-битную версию, переключите конфигурацию сборки на 64-битную (но вы должны переключиться обратно на "x86" или "AnyCPU", чтобы создать форму).

READ ALSO
Посчитать количество итераций цикла do while

Посчитать количество итераций цикла do while

Подскажите, пожалуйста, как посчитать количество итераций цикла do while с помощью Roslyn? Нужен семантический анализатор, который бы определял...

119
Доступ к статическим файлам в ASP.NET Core MVC

Доступ к статическим файлам в ASP.NET Core MVC

Для статических файлов в проекте ASPNET Core MVC есть папка wwwroot

102
Как реализовать выстрел из гарпуна(хука)?

Как реализовать выстрел из гарпуна(хука)?

Я хочу реализовать выстрел из гарпуна(хука), как в игре Dota 2Чтобы когда Pudge бросал крюк: 1

131
C#. Слишком длинный строковый параметр

C#. Слишком длинный строковый параметр

Заменяю текст в документе wordПока текст короткий передаю в word, всё нормально работает

120