Конструктор VS2012 не может загрузить сборку

Существует решение с проектом С#, ссылающимся на управляемую библиотеку С++, которая, в свою очередь, ссылается на собственную С++-библиотеку. Проект С# содержит BaseUserControl и ChildUserControl, который расширяет его.

Проблема в том, что если код из нативного С++ вызывается (через управляемую библиотеку С++) в конструкторе BaseUserControl, то ChildUserControl не может быть отображен в представлении конструктора; вы также не можете добавить ни один из BaseUserControl или ChildUserControl в форму. Мы получаем следующую ошибку:

Не удалось загрузить файл или сборку 'TestLibCPP, Version = 1.0.4877.30347, Culture = neutral, PublicKeyToken = null или одна из его зависимостей. система не может найти указанный файл.

Как мы можем это исправить?

Я включил простое решение VS2012, которое демонстрирует проблему. Это надуманный пример, основанный на проблеме, которую мы имеем с большой кодовой базой, которая недавно была преобразована из VS2005 в VS2012.

Спасибо

4 ответа

Если у вас есть исходный код, попробуйте перестроить решение, используя конфигурацию (платформа X86), а затем попробуйте открыть ChildUserControl с дизайнером.


Проблема может заключаться в том, что ваша собственная dll построена поверх 32-битных конфигураций. Попробуйте создать проект на 32-битной платформе.


Попробуйте изменить целевую платформу GUITest на x86. В настоящее время это "Любой процессор". Вы можете сделать это независимо от того, находится ли вы на 64-битной или 32-битной коробке. Не забудьте также просмотреть формы в вашей конфигурации (Debug, Release,..)


Проблема в точности основана на архитектуре X86 ваших проектов на С++. Ваш проект WinForms ссылается на "Любой процессор".

Я включил изображение, чтобы показать вам, где его изменить (смотрите его на немецком языке, но вы должны найти его из положения на экране:)

  • Щелкните правой кнопкой мыши проект Winforms и перейдите к настройкам
  • Переключиться на вкладку Компиляция (предположим, что это английское имя)
  • Измените целевую платформу на x86
  • Постройте и получайте удовольствие;)

EDIT:

Я только что видел, что вопрос Bounty касался того, что все настроено на 64 бит, чтобы достичь этого, просто установите целевые объекты библиотек С++ в архитектуру x64.

  • Щелкните правой кнопкой мыши на любой из библиотек С++ и перейдите к настройкам
  • в верхней области вы увидите кнопку с именем manager-manager
  • во вновь открывшемся окне просто установите все С++ dll на x64.
  • Если его не доступно для выбора, просто щелкните по стрелке и создайте новую архитектуру x64 (не ARM) для второго проекта, снимите флажок "Создать новый" и выберите ранее созданный.

licensed under cc by-sa 3.0 with attribution.