2014-12-17 3 views
0

Я пытаюсь выполнить файл из заданного массива байт, который прекрасно работает:CodeDom + Assembly.Load бросает BadImageFormatException

byte[] bytes = File.ReadAllBytes(@"C:\Location\program.exe"); 
MessageBox.Show(bytes.Length) // The same size for both the VS compiled and CodeDom compiled application 
Assembly assembly = Assembly.Load(bytes); //Throws exception when compiled with CodeDOM 

Этот код компилируется и работает нормально из приложения I, генерируемого Визуальными студия.

Однако, когда я добавляю этот кусок кода в приложение, которое я сгенерировал с помощью CodeDOM, он генерирует исключение BadImageException.

Сгенерированное приложение CodeDOM считывает байты в порядке, так как обе версии выдают ту же длину байта [].

Я попытался изменить целевую структуру с .NET 2.0 на .NET 4.5, я попытался изменить целевую архитектуру, но я не мог заставить ее работать.

Что может послужить причиной этого исключения?

+0

Возможно, из-за конфликта 64 бит и 32 бит. Вы можете попытаться загрузить сборку в архитектуре другого типа. Либо ваша сборка является проблемой, либо программой, которая загружает эту сборку. – dotnetstep

+0

Я установил целевую архитектуру для сборки на x86, и теперь приложение codeDOM может загрузить ее без проблем, спасибо! Почему же приложение, созданное с помощью VS2012, не имеет этой проблемы? – John

+0

Нет, это не так. Это то, как вы строите свой проект. Я опишу детали в ответ, так что сценарий может помочь другим. – dotnetstep

ответ

1

Проблема заключается в архитектуре сборки и приложении, которые загружают сборку.

Так что если приложение построено с помощью X64, и если оно пытается загрузить сборку с X86, тогда это создает проблему. Это применимо и в другом случае.

Другой сценарий заключается в том, что при создании приложения с помощью Visual Studio по умолчанию используется любой процессор.

В этом случае, когда процесс 64 бит, он будет загружаться как 64 бит, а когда приложение - 32-битное, оно равно 32 бит. Мы ограничиваем этот путь, потому что некоторый неуправляемый ресурс работает в особой среде.

У меня возникла такая проблема с клиентом Oracle .net.

Смежные вопросы