2016-07-03 5 views
0

У меня есть приложение .NET (VB Winforms), которое запускает основной исполняемый файл. При запуске этот исполняемый файл будет искать плагины и будет загружать их с использованием System.Reflection.Assembly.Load()Распространение CEFSharp Winforms (x86) - Попытка сохранить мое приложение как AnyCPU

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

Теперь это приложение в настоящее время работает с целевой платформой AnyCPU. Я думал, что приложение будет работать на обеих платформах x86/x64. Если он установлен на x86, у него будет ограничение на 2 ГБ памяти, но оно также будет доступно на x64 и будет работать свободно (так оно работает - правильно?)

Теперь я хочу показать файлы справки с моего веб-сайта внутри встроенного браузер. Я выбрал CEFSharp Chromium Browser, и он работает блестяще, однако CEFSharp ДОЛЖЕН иметь целевую платформу либо специально настроенного x86, либо x64.

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

Could not load file or assembly 'XIBrowser.dll' or one of its dependencies. is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)"} System.BadImageFormatException: {"Could not load file or assembly 'XIBrowser.dll' or one of its dependencies. is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)"}

оказывается, что я не могу загрузить проект без основного приложения, установленного на целевую платформу х86, что означает я потерять все преимущества его работы на x64-разрядной ОС.

Итак ... Есть ли способ обойти это? Я действительно не хочу поддерживать две версии моего приложения для x86 и x64.

Есть ли у кого-нибудь идеи о том, как запустить CEFSharp, но все равно сохранить цель AnyCPU?

+0

Нет обходного пути. Вы не можете загружать 32-разрядные библиотеки DLL в 64-битные процессы и наоборот. Битность всех ваших зависимостей должна соответствовать бит вашего приложения. Просто целевая 32-битная. Весьма маловероятно, что вашему приложению WinForms требуется более 2 ГБ ОЗУ. –

+0

https://github.com/cefsharp/CefSharp/issues/1714 – amaitland

+0

В краткосрочной перспективе, если память важна, установите флаг 'largeaddressaware' в ваш исполняемый файл и он обратится к памяти« 3gb ». http://stackoverflow.com/questions/1346480/how-to-make-a-net-application-large-address-aware – amaitland

ответ

0

Да, вы все в порядке. Ни в коем случае.

Я теперь преобразовал свою целевую структуру в x86, и я запускаю x86 версию CEFSharp. Все работает нормально.

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

Спасибо всем.