Я пытаюсь выполнить файл из заданного массива байт, который прекрасно работает: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, я попытался изменить целевую архитектуру, но я не мог заставить ее работать.
Что может послужить причиной этого исключения?
Возможно, из-за конфликта 64 бит и 32 бит. Вы можете попытаться загрузить сборку в архитектуре другого типа. Либо ваша сборка является проблемой, либо программой, которая загружает эту сборку. – dotnetstep
Я установил целевую архитектуру для сборки на x86, и теперь приложение codeDOM может загрузить ее без проблем, спасибо! Почему же приложение, созданное с помощью VS2012, не имеет этой проблемы? – John
Нет, это не так. Это то, как вы строите свой проект. Я опишу детали в ответ, так что сценарий может помочь другим. – dotnetstep