Имеется базовый класс для формы и собственно форма, которая его наследует:
// 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), но после установки одинаковых путей проблема не решилась.
С чем может быть связана эта ошибка? Можно ли её исправить? Всё ли я делаю правильно?
Вот что отвечает 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", чтобы создать форму).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, пожалуйста, как посчитать количество итераций цикла do while с помощью Roslyn? Нужен семантический анализатор, который бы определял...
Для статических файлов в проекте ASPNET Core MVC есть папка wwwroot
Я хочу реализовать выстрел из гарпуна(хука), как в игре Dota 2Чтобы когда Pudge бросал крюк: 1
Заменяю текст в документе wordПока текст короткий передаю в word, всё нормально работает