Подтвердить что ты не робот

Visual Studio конструктор в x64 не работает

В Visual Studio 2010 64bit я не могу создавать свои формы.
Я продолжаю получать это предупреждение (и ошибку):

Warning 18  
The designer could not be shown for this file because none of the classes within it can be designed.  The designer inspected the following classes in the file: 
MainForm --- The base class 'Blah' could not be loaded.  Ensure the assembly has been referenced and that all projects have been built.

Это происходит только тогда, когда я компилирую для x64... в x86 дизайнер работает хорошо.

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

Кто-нибудь еще столкнулся с этим и нашел решение?

4b9b3361

Ответ 1

Я могу воспроизвести вашу проблему, создав приложение WPF с пользовательским элементом управления (поместите пользовательский элемент управления в приложение wpf и соберите x64).

Вот мое предположение относительно того, что происходит:

Visual Studio - это 32-разрядное приложение, и дизайнер WPF должен загружать ссылочные сборки (такое поведение наблюдается все время, когда вы используете пользовательские элементы управления, где вам приходится перестраивать, чтобы дизайнер обновлялся). Windows не поддерживает совместное использование между 32-разрядным и 64-разрядным - у вас должно быть либо 32-разрядное, либо 64-разрядное приложение, точка, без совместного использования.

Поскольку конструктор WPF является 32-разрядным, сборки должны быть 32-разрядными.

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

Создайте свое приложение с опцией "Любой процессор". Это приведет к тому, что ваш код станет JIT 32-битным на 32-битных платформах и 64-битным на 64-битных платформах.

  • Конструктор будет работать в "любом процессоре", потому что сборки привязаны к 32-разрядным.
  • Когда вам нужно конкретно отладить 64-битную версию, переключите конфигурацию сборки на 64-битную (зная, что вы должны переключиться обратно на "32-битную или" любой процессор "сделать дизайн формы)"

Ответ 3

Предлагаемое решение от Microsoft состоит в том, чтобы переместить базовые классы в отдельную сборку, скомпилированную с использованием AnyCPU или x86 (если ваш реальный проект должен быть x64).

К сожалению, это относится ко всем базовым классам: если ваше наследование FormC: FormB: FormA, то оба FormA и FormB должны быть в ( external) 32-битная сборка, если вы хотите отредактировать FormC в конструкторе.

Конечно, это относится и к UserControls! Хотелось бы знать об этом до того, как наша команда решила перейти на 64-битную версию - уведомление о том, что изменение параметров компиляции было бы очень приятно, Microsoft...