У меня есть проект C # 2.0, который настроен на «Any Cpu», однако он ссылается на проект C ++, который строит 32 bit dll.
Когда я пытаюсь запустить мою программу на 64-битной машине, я получаю следующую ошибку:
System.BadImageFormatException
был необработанное сообщение: не удалось загрузить файл или сборкаTreeTMHook, Version = 1.0.2889.19619, Культура = нейтральная, PublicKeyToken = ноль
или одна из его зависимостей. Попытка был сделан, чтобы загрузить программу с неверный формат.
Как это исправить?
Обновление
Я хочу сохранить основной проект как любой процессор.
Спасибо.
Вам потребуется создать проект .NET как 32-разрядный (цель x86), если вы хотите, чтобы он корректно загружал 32-разрядную DLL на 64-разрядную машину.
RE: Обновление:
Если вы хотите сохранить свой проект как «Любой процессор», вам потребуются 32-битная и 64-битная версии DLL, и убедитесь, что соответствующая версия распространяется вместе с вашим приложением. Если вы не можете собрать другой проект как 64-разрядный, вы должны собрать свой проект .NET только как 32-разрядный.
Вам нужно будет принудительно запустить свой EXE-проект в 32-битном режиме, чтобы он мог использовать эту C ++ DLL. Проект + Свойства, вкладка Сборка, Целевая платформа = x86.
Возможно, вы захотите взглянуть на эту статью , в которой объясняется, почему это невозможно, короче говоря, поскольку вы имеете дело с указателями при доступе к неуправляемому коду.
Чтобы сохранить основной проект как Любой процессор
, вам необходимо предоставить как 32-битную, так и 64-битную версию .dll, что должно быть возможным, учитывая, что вы собираете его из исходного кода.
Затем вам нужно предоставить исполняемому файлу манифест, указывающий на правильную версию dll в зависимости от платформы.