Была сделана попытка загрузить программу имеющую неверный формат 0x8007000b


Была сделана попытка загрузить программу имеющую неверный формат 0x8007000b

Home » Misc » Была сделана попытка загрузить программу имеющую неверный формат 0x8007000b

Ошибка при сборке решения “Невозможно загрузить файл или сборку “ХХХ” или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат”.

Ошибка при сборке решения “Невозможно загрузить файл или сборку “ХХХ” или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат”. By: Dmitry Bobrovsky Date: 22.02.2011 Categories: !RUS,C#,PROGRAMMING,TFS

При сборке решения

Error    1    Невозможно загрузить файл или сборку "file:///D:/SOURCES/bin/x86/RELEASE/ELA/ELA.DocumentImaging.dll" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат. Строка 304, позиция 5.    D:/SOURCES/ELA/ELA.ClientMainForm.resx    304    5    ELA. Client

по английски это выглядит примерно так

Error 1 Could not load file or assembly 'file:///c:/users//documents/visual studio 2010/Projects/WindowsFormsApplication5/ClassLibrary1/bin/x86/Debug/ClassLibrary1. dll' or one of its dependencies. An attempt was made to load a program with an incorrect format. Line 174, position 5. c:\users\documents\visual studio 2010\Projects\WindowsFormsApplication5\WindowsFormsApplication5\Form1.resx 174 5 WindowsFormsApplication5

Нашел статейку http://blogs.msdn.com/b/visualstudio/archive/2010/06/19/resgen-exe-error-an-attempt-was-made-to-load-a-program-with-an-incorrect-format.aspx основной смысл которой сводился к тому что некий процесс (наверное имелось ввиду — процесс сборки) пытается загрузить сборку на которую у него есть ссылка с отличающейся архитектурой.

В статье предлагаются 3 способоа обойти проблему. Самый первый, собирать с AnyCPU я попробовал, применил для  всего решения. Это не помогло.

Остальные два решения

Notes on Workarounds 2 and 3:Workarounds 2 and 3 apply specifically to the scenario where a project targeting . NET 3.5 has a .resx file that references a 32-bit assembly. There is currently no workaround for targeting 4. 0 and trying to reference a 32-bit assembly from 64-bit MSBuild or vice versa – aside from changing to use the MSBuild.exe of the architecture you’re targeting.Please be aware that by forcing ResGen.exe to execute as 32-bit, you are essentially introducing the opposite problem: ResGen.exe will now error if you try to load 64-bit architecture-specific reference assemblies in it.
Workaround 2:Make ResGen.exe 32-bit by:1. Cd “%ProgramFiles(x86)%Microsoft SDKsWindowsv7.0ABin”2. Corflags /32Bit+ /Force ResGen.exeHowever, since our current build process has a heuristic that assumes that ResGen.exe is MSIL, just doing the above step will cause a different error (“The specified task executable "ResGen.exe" could not be run. The handle is invalid”) unless you inform GenerateResource that ResGen.exe is now 32-bit via setting the property “ResGenToolArchitecture” to “Managed32Bit”. This can be accomplished by doing one of the following:

1. Adding <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> to a PropertyGroup in the project file of any project that generates resources targeting . NET 3.5 – since the corflags trick affects the bitness of ResGen.exe on a system-wide level, the property must be set for all affected projects as well.

2. OR If running MSBuild.exe directly, passing it using the global property switch: ‘/p:ResGenToolArchitecture=Managed32Bit’

3. OR Setting it as an environment variable in the command window that MSBuild.exe is run from or the VS 2010 IDE is opened from: ‘set RESGENTOOLARCHITECTURE=Managed32Bit’

Pros: Doesn’t require changing the architecture of the referenced assembly

Cons: More complicated; requires baking the workaround either into the project file, or into your build system as a whole.
Workaround 3:

Force the CLR to load all MSIL applications as 32-bit by:

1. Cd “%windir%\Microsoft.NET\Framework64\v2.0.50727”

2. Ldr64.exe setwow

Then, since this also is a way to force ResGen.exe to execute as though it’s a 32-bit process, you must also go through the second part of Workaround 2 (setting ResGenToolArchitecture=Managed32Bit).

Pros: Doesn’t require changing the architecture of the referenced assembly

Cons: Affects how the CLR works for the entire machine. Also the same cons as Workaround 2.

я не стал пробовать, т.к. возникли некоторые сомнения. Попытался разобраться с файлом ресурсов MainForm.resx, который вызывает ошибку. Декодировал ресурс из base64 в простой текст и увидел что в самом закодированном ресурсе стоит ссылка на сборку System.Windows.Forms, Version=4.0.0.0 и это при том что в свойствах самого проекта был задан Target Framework = 2.0.

(Примечание:При декодировании base64 столкнулся с проблемой).

Копаю дальше. Нашел баг на Microsoft Connect который гораздо ближе по смыслу чем первая найденная статья. Человек подтверждает догадки

Posted by DanyR on 28.10.2010 at 0:48
The patch from Ed Hartley has the following internal effect:

I decoded an ImageStream with «j00L» and «j0yL» and found out, that in VS2010 MS is serializing ImageLists with a reference to System. Windows.Forms, Version=4.0, even when the project is set to 2.0. The tip changes exactly this («0» to «y» changes «4» to «2»).

Please, please, please fix this ASAP.

Daniel

Там же к статье приложена программка для правки файлов ресурсов Set2010ImageListsToNET2.zip которая правит ссылку в ресурсном файле на System.Windows.Forms, Version=2.0.0.0.

Короче нужно те ресурсные файлы которые вызывают ошибку при сборке обработать этой прогой — это помогает.

I need help with my error

xenizattion1
New Member

Posts: 2


I need help with my error Jun 18, 2022 15:34:57 GMT -5  

Post by xenizattion1 on
Jun 18, 2022 15:34:57 GMT -5

When i dowloaded the Sims4Studio it didn`t find a path to my TS4 and didn`t want to do that even when i writed down my path to it. Than I moved my sims into another folder and writed this another path and clicked "save changes" or smth like that. I didn`t see any loading animation on my screen and decided to click "Build" and it gave me an error:

The Sims 4 Studio - Version 3.1.5.8

System.AggregateException: Произошла одна или несколько ошибок. ---> System.BadImageFormatException: Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)

в SQLite.SQLite3.Open(Byte[] filename, IntPtr& db, Int32 flags, IntPtr zvfs)

в SQLite.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)

в SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)

в S4Studio.Data.FileDb.Sims4FileTable.CreateConnection()

в S4Studio.Data.FileDb.Sims4FileTable.InitializeMetadata[TResource,TMetadata](Func`2 extra_func)

в S4Studio.Shared.BuildFeatureViewModel.BuildItemList()

в S4Studio. Shared.FeatureViewModel.<get_CreateCommand>b__27_1()

в System.Threading.Tasks.Task.InnerInvoke()

в System.Threading.Tasks.Task.Execute()

--- Конец трассировки внутреннего стека исключений ---

---> (Внутреннее исключение #0) System.BadImageFormatException: Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)

в SQLite.SQLite3.Open(Byte[] filename, IntPtr& db, Int32 flags, IntPtr zvfs)

в SQLite.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)

в SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)

в S4Studio.Data.FileDb.Sims4FileTable.CreateConnection()

в S4Studio.Data.FileDb.Sims4FileTable.InitializeMetadata[TResource,TMetadata](Func`2 extra_func)

в S4Studio.Shared.BuildFeatureViewModel.BuildItemList()

в S4Studio.Shared.FeatureViewModel.<get_CreateCommand>b__27_1()

в System. Threading.Tasks.Task.InnerInvoke()

в System.Threading.Tasks.Task.Execute()<---

What should i do with this? Someone help me pleeeaaaseeee. (Sorry if i wrote something incorrectly, my English is not good)

xenizattion1
New Member

Posts: 2


I need help with my error Jun 18, 2022 15:36:57 GMT -5  

Post by xenizattion1 on
Jun 18, 2022 15:36:57 GMT -5

There some not English words in the text of error and if you need i can translate them. Or you can translate them by yourself in google translate.

mauvemorn
Global Moderator

Posts: 7,565
Member is Online


I need help with my error Jun 18, 2022 16:58:24 GMT -5  

Post by mauvemorn on
Jun 18, 2022 16:58:24 GMT -5

Здравствуйте. Попробуйте это решение, предложенное разработчицей в треде с похожей ошибкой:
Hi. Try the solution offered by the developer in the thread with the similar issue:

 Sims 4 Studio needs the C++ Redistributable from Microsoft installed in order to work.


Last Edit: Jun 18, 2022 17:00:52 GMT -5 by mauvemorn

Reply

.net - «Была предпринята попытка загрузить программу с неправильным форматом», даже если платформы одинаковые

Я вызываю функции из 32-битной неуправляемой DLL в 64-битной системе. Я получаю:

BadImageFormatException: была предпринята попытка загрузить программу с неправильным форматом. (Исключение из HRESULT: 0x8007000B)

Сначала мои проекты были настроены на платформу Any CPU, поэтому я изменил их оба на x86, но эта ошибка все еще возникает. Это действительно единственное исправление, которое я знаю для этого.

Библиотеки DLL не повреждены или что-то в этом роде, потому что я могу использовать их с другими программами (для которых у меня нет исходного кода). Я думал, что, возможно, это не находит зависимости, но я проверил, и они все там. Кроме того, не выдаст ли в этом случае DllNotFoundException ?

Что еще я могу сделать? И прежде чем вы скажете: «Используйте вместо этого 64-разрядную неуправляемую DLL», позвольте мне указать, что ее нет. ;)

  • .net
  • 64-разрядная
  • pinvoke
  • 32-разрядная
  • badimageformateException

4

Если вы попытаетесь запустить 32-разрядные приложения на IIS 7 (и/или на компьютере с 64-разрядной ОС), вы получите ту же ошибку. Итак, в IIS 7 щелкните правой кнопкой мыши пул приложений, перейдите к «дополнительным настройкам» и измените «Включить 32-разрядные приложения» на «ИСТИНА».

Перезапустите ваш сайт, и он должен работать.

7

Каким-то образом флажок Build в Configuration Manager был снят для моего исполняемого файла, поэтому он все еще работал со старой сборкой Any CPU. После того, как я это исправил, Visual Studio пожаловалась, что не может отладить сборку, но это было исправлено перезапуском.

4

В Visual Studio щелкните правой кнопкой мыши проект -> На левой панели щелкните вкладку Build ,

под Platform Target выберите x86 (или, в более общем случае, архитектуру , соответствующую библиотеке, на которую вы ссылаетесь)

5

Если вы сталкиваетесь с этой ошибкой, когда нажимаете кнопку с зеленой стрелкой для запуска приложения, но все еще хотите запустить приложение в 64-разрядной версии. Вы можете сделать это в VS 2013, 2015, 2017 и 2019

Перейдите: Инструменты > Параметры > Проекты и решения > Веб-проекты > Использовать 64-разрядную версию IIS Express

Или вы можете сделать это для каждого проекта в Project Properties > Web > Bitness

7

У меня тоже была эта проблема. Перепробовал все советы здесь, но они не помогли.

Я нашел еще одну вещь для проверки, которая исправила это для меня. В Visual Studio щелкните проект правой кнопкой мыши и откройте «Свойства». Нажмите на вкладку «Компиляция» (или «Сборка»), а затем нажмите «Дополнительные параметры компиляции» внизу.

Проверьте раскрывающийся список «Целевой ЦП». Он должен соответствовать «Платформе», которую вы создаете. То есть, если вы строите «Любой ЦП», тогда «Целевой ЦП» должен указывать «Любой ЦП». Просмотрите все свои платформы, сделав их активными, и проверьте этот параметр.

3

Если вы используете Any CPU , вы можете столкнуться с этой проблемой, если установлен флажок Prefer 32-bit :

Убедитесь, что вы сняли этот флажок на вкладке Build свойства проекта!

5

В моем случае я использовал родную DLL на C#. Эта DLL зависела от пары других отсутствующих DLL. Как только эти другие DLL были добавлены, все заработало.

1

  1. Перейдите: Инструменты → Параметры → Проекты и решения → Веб-проекты → Используйте 64-разрядную версию IIS Express.
  2. Изменить настройку ниже для проекта веб-службы:

1

Немного не по теме этого поста, но поиск этого сообщения об ошибке привел меня сюда.

Если вы выполняете сборку через командную систему и получаете эту ошибку, на вкладке процесса определения сборки есть параметр «Платформа MSBuild». Если для этого параметра установлено значение «Авто», вы можете столкнуться с этой проблемой. Изменение его на «X86» также может устранить ошибку.

1

У нас была аналогичная проблема, и нам удалось ее исправить, установив цель платформы на x86.

2

В Visual Studio 2019 у меня была аналогичная проблема, когда я хотел запустить тесты (MSTest непосредственно из VS). В моем случае у меня была только собственная DLL x64, и я получил это сообщение об ошибке. Сначала я подумал, что это потому, что Visual Studio работает как x86, но эта страница помогла мне решить проблему:

Запустить юнит-тест как 64-битный процесс

Он говорит:

  1. Настройте свои проекты на любой процессор
  2. Явно определить архитектуру процессора

Я сделал и то, и другое (я явно поставил x64), и тогда мои тесты начали работать.

1

Основываясь на ответе @paibamboo

Он сказал: Перейдите: Инструменты > Параметры > Проекты и решения > Веб-проекты > Используйте 64-разрядную версию IIS Express

Мой коллега установил этот флажок (он явно искал его), но у него было указанное сообщение об ошибке. Через несколько часов он снял флажок и снова установил его. О чудо: теперь код работает успешно.

Кажется, есть два места, где сохраняется состояние этого ящика, который рассинхронизировался. Отменив и перепроверив его, он снова синхронизировался.

Вопрос для более знающих пользователей: было ли обновление или что-то на прошлой неделе (для VS 2015), которое рассинхронизировало состояния?

Также см. этот ответ, который решил ту же проблему для меня.

Автор: Luis Mack, 12.05.2010, 8:50 Я обнаружил ту же проблему, только для конкретного проекта при компиляции на 64-битной машине. Исправление, которое, КАЖЕТСЯ, работает, заключается в том, чтобы вручную изменять один символ в потоке изображения КАЖДЫЙ РАЗ, когда пользовательский элемент управления или форма редактируются в конструкторе

.
 AAEAAAD/////AQAAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w 

Изменить на

 AAEAAAD/////AQAAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w 

То есть 00LjAuMC4w назад к 0yLjAuMC4w в конце строки (00 назад к 0y)

0

В моем случае это было неправильное содержимое файла. DLL была загружена из Интернета, но содержимое DLL было HTML-страницей: D Попробуйте проверить, является ли это двоичным файлом, если это похоже на правильную DLL :)

В моем случае я использую крошечный .exe, который перезагружает указанные DLL через Reflection. Поэтому я просто делаю эти шаги, которые спасают мой день:

В свойствах проекта в обозревателе решений на вкладке сборки я выбираю целевую платформу x86

В моем случае я запускал тесты через MSTest и обнаружил, что развертываю для теста как 32-разрядную, так и 64-разрядную DLL каталог. Программа отдавала предпочтение 64-битной DLL и вызывала ее сбой.

TL;DR Убедитесь, что для тестов вы развертываете только 32-разрядные библиотеки DLL.

Если вы импортируете неуправляемую DLL, используйте

 CallingConvention = CallingConvention.Cdecl 

в вашем методе импорта DLL.

Я решил эту проблему способом "Windows". Проверив все свои настройки, очистив решение и пересобрав его, я просто закрываю решение и снова открываю его. Затем это сработало, поэтому VS, вероятно, не избавился от чего-то во время очистки. Когда логические решения не работают, я обычно прибегаю к нелогичным (или кажущимся нелогичным). Винда меня не подводит. :)

Мне удалось решить эту проблему, сопоставив мою версию сборки с версией .NET на сервере.

Я дважды щелкнул файл .exe, чтобы посмотреть, что произойдет, и он сказал мне установить 4.5....

Итак, я понизил версию до 4.0, и это сработало!

Убедитесь, что ваши версии совпадают. Он отлично работал на моем устройстве разработки, но на сервере была более старая версия .NET.

У нас была такая же проблема в ядре .NET. Решение состояло в том, чтобы загрузить 32-разрядную среду выполнения .netcore и указать цель вашего проекта x86

. В файл csproj добавить

 x86целевая платформа> $(MSBuildProgramFiles32)\dotnet\dotnet

Это использовалось для компьютера с Windows, вам нужно было настроить пути и т. д. для Linux/OSX

В моем случае у меня не было правильного проекта, установленного в качестве стартового проекта. Я зашел в настройки решения и выбрал правильный проект запуска, и он сработал

В моем случае такая же ошибка произошла после публикации. Я публиковал ранее с другой конфигурацией платформы.

Решение состояло в том, чтобы сначала очистить папку публикации, и тогда это сработало.

(в качестве альтернативы установите для параметра «удалить существующие файлы» значение true)

Другая причина, которая может вызвать это исключение, — отсутствие распространяемых компонентов C++ для целевой платформы вашей библиотеки DLL. Мне было трудно это выяснить при тестировании на виртуальной машине.

Для ядра .net убедитесь, что Ijwhost.dll находится в выходном каталоге, иногда он не копируется, и это вызовет ошибку. См. https://github.com/dotnet/runtime/issues/38231, а также https://stackoverflow.com/a/58773266/9665729

. Также обратите внимание, что версия используемого DLL-файла (файлов) (в моем случае «WebView2Loader. dll»), который используется, очень важен. У меня была почти такая же проблема с «Microsoft. WebView2.FixedVersionRuntime.101.0.1210.39»..x64», когда я пытался использовать компонент WebView2 в оснастках MMC с типами «HTMLView» или «FormView».

Я просто скопировал указанный файл dll по правильному пути, доступному для проекта (вы просто поместите его рядом с выходными файлами вашего проекта, чтобы протестировать его), а затем браузер WebView2 начал функционировать, как и ожидалось.Сообщения об ошибках Microsoft иногда (по крайней мере, в моем случае) немного вводили в заблуждение и не передавали достаточной и точной информации.

Я получил сообщение «BadImageFormatException», которое обычно возникает, когда вы смешиваете цели платформы (например, используете файл dll, скомпилированный в X64, в приложении, предназначенном для x86, или наоборот) или смешиваете собственный код и .NET, но это не было моей проблемой в все. Я надеюсь, что это поможет тем, кто может застрять.

У меня также была эта проблема, когда я хотел вызвать родную DLL из C#/WPA. Следующие шаги работают для моего проекта. Свойства-> Сборка-> Целевая платформа x64/x86 (измените эту опцию, тогда она будет работать).

.net - System.BadImageFormatException Предпринята попытка загрузить программу с неверным форматом

спросил

Изменено 6 месяцев назад

Просмотрено 135 тысяч раз

Я пишу подключаемый модуль для другой программы, основанной на общедоступном API .NET. Обычно эти плагины создаются путем создания библиотеки DLL классов, которая ссылается на сборку API. Затем создается класс команд путем наследования от базового класса команд в сборке API. Затем приложение настраивается на ссылку на DLL-файл подключаемого модуля, а затем также отвечает за фактический запуск пользовательского класса команд, когда пользователь запрашивает его.

Однако теперь я пытаюсь автоматизировать генерацию некоторого кода с помощью System.CodeDOM и хочу создать простое консольное приложение, которое автоматически генерирует новые типы классов на основе типов в сборке API.

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

Исключение System.BadImageFormatException было необработанное сообщение: не удалось загрузить файл или сборка RevitAPI, Версия = 2011.0.0.0, культура = нейтральная, PublicKeyToken=null' или один из его зависимости. Была предпринята попытка загрузить программу с некорректным формат.

Обычно мне нужно установить целевую структуру сборки плагина на 3.5. Однако теперь я обнаружил, что указанная выше ошибка исчезает, если я устанавливаю целевую структуру своего консольного приложения на 2.0. Однако мое консольное приложение уже ссылается на другие мои библиотеки классов, целевая платформа которых установлена ​​на 3. 5. И я действительно не хотел бы переписывать их вокруг фреймворка 2.0.

  • .net
  • badimageformateexception
  • revit
  • целевая структура
  • revit-api

1

Возможно несоответствие 32-64 бит.

Если вы работаете в 64-разрядной ОС, сборка RevitAPI может быть скомпилирована как 32-разрядная, а ваш процесс — как 64-разрядный или «любой процессор».

Или RevitAPI скомпилирован как 64-разрядный, а ваш процесс скомпилирован как 32-разрядный или «любой ЦП» и работает в 32-разрядной ОС.

6

Если вы используете IIS, Перейти к пулу приложений Выберите тот, который использует ваш сайт, и нажмите «Дополнительные настройки». Убедитесь, что для параметра «Включить 32-разрядные приложения» установлено значение «Истина 9».0003

1

У меня возникли проблемы с новой установкой VS с проектом x64 — для Visual Studio 2013, Visual Studio 2015 и Visual Studio 2017:

 Инструменты -> Параметры -> Проекты и решения -> Веб-проекты -> Установите флажок «Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов».

3

Эти предложения верны, но я хотел добавить примечание. Я застрял просто потому, что у меня было несколько конфигураций публикации. Я редактировал «Отладка — любой процессор», а затем развертывал конфигурацию «Отладка — x64». Убедитесь, что вы редактируете и развертываете одну и ту же конфигурацию. Убедитесь в этом, щелкнув вкладку «Настройки» после того, как вы начнете публикацию, и появится диалоговое окно «Публикация в Интернете». Убедитесь, что он соответствует конфигурации, которую вы редактировали. (Это 4 часа моей жизни, которые я никогда не верну!)

1

У меня была такая же проблема при запуске моего программного обеспечения на другом компьютере. На моем компьютере разработчика (Windows 7) у меня была установлена ​​Visual Studio 2015, целевым компьютером была чистая установка Windows 10 (установлен .Net). Я также протестировал его на другом чистом ПК с Windows 7, включая . Net Framework. Однако на обоих целевых компьютерах мне нужно было установить распространяемый пакет Visual C++ для Visual Studio 2015 для x86 или x64 (зависит от того, для чего создается ваше приложение). Это уже было установлено на моем компьютере разработчика.

В моем приложении использовалась библиотека C, которая была скомпилирована в приложение C++ с использованием параметров /clr и /TP в Visual Studio. Кроме того, приложение предоставляло функции C# с помощью сигнатур метода dllexport. Не уверен, что интеграция с С# привела к этой ошибке или приложение на С++ дало бы мне то же самое.

Надеюсь, это кому-нибудь поможет.

Для запуска на любом 62-битном или 32-битном процессоре выполните следующие действия: Щелкните правой кнопкой мыши имя проекта в обозревателе решений > Свойства > Построить. и иметь их в разделе «Конфигурация»: Активный (Выпуск) , Платформа: Активный (Любой ЦП) и Цель: x86 . и рядом с кнопкой «Выполнить». Выберите опцию Release и Any CPU из опций. А затем сохраните его и запустите.

У меня та же проблема, что и у меня. Я только что скачал 32-битную dll и добавил ее в свою папку bin, это решило мою проблему

Я пытался загрузить dll с архитектурой x86. в проекте С# я описал целевую платформу как x86 и избавился от ошибки

Также обратите внимание, что версия используемого DLL-файла(ов) по ссылке очень важна. У меня была почти такая же проблема с «Microsoft.WebView2.FixedVersionRuntime.101.0.1210.39.x64», когда я пытался использовать компонент WebView2 в оснастках MMC с типами «HTMLView» или «FormView».

Я просто скопировал файл dll (в моем случае WebView2Loader.dll, версия 1.0.1248.0, размер = 157640 байт) по правильному пути, который был доступен для проекта (вы можете просто поместить его рядом с выходными файлами проекта, чтобы проверить это), а затем браузер WebView2 начал функционировать должным образом. Сообщения об ошибках Microsoft иногда (по крайней мере, в моем случае) немного вводили в заблуждение и не давали достаточной и точной информации.


Learn more
  • Как перезагрузить самсунг а31
  • Подключение внешнего жесткого диска к компьютеру
  • Лучший смартфон до 15000
  • Как проверить время отклика мыши
  • 0X800F0845 ошибка обновления
  • Программа снимок экрана windows 10
  • Где в гугле найти контакты с телефона
  • Пришли деньги на карту от неизвестного
  • Предыдущие драйвера nvidia
  • Дергается мышь windows 10
  • Почему камера на ноутбуке не работает в зуме

Ошибка при сборке решения “Невозможно загрузить файл или сборку “ХХХ” или один из зависимых от них компонентов.

Была сделана попытка загрузить программу, имеющую неверный формат”. Ошибка при сборке решения “Невозможно загрузить файл или сборку “ХХХ” или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат”. By: Dmitry Bobrovsky Date: 22.02.2011 Categories: !RUS,C#,PROGRAMMING,TFS

При сборке решения

Error    1    Невозможно загрузить файл или сборку "file:///D:/SOURCES/bin/x86/RELEASE/ELA/ELA.DocumentImaging.dll" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат. Строка 304, позиция 5.    D:/SOURCES/ELA/ELA.ClientMainForm.resx    304    5    ELA.Client

по английски это выглядит примерно так

Error 1 Could not load file or assembly 'file:///c:/users//documents/visual studio 2010/Projects/WindowsFormsApplication5/ClassLibrary1/bin/x86/Debug/ClassLibrary1. dll' or one of its dependencies. An attempt was made to load a program with an incorrect format. Line 174, position 5. c:\users\documents\visual studio 2010\Projects\WindowsFormsApplication5\WindowsFormsApplication5\Form1.resx 174 5 WindowsFormsApplication5

Нашел статейку http://blogs.msdn.com/b/visualstudio/archive/2010/06/19/resgen-exe-error-an-attempt-was-made-to-load-a-program-with-an-incorrect-format.aspx основной смысл которой сводился к тому что некий процесс (наверное имелось ввиду — процесс сборки) пытается загрузить сборку на которую у него есть ссылка с отличающейся архитектурой.

В статье предлагаются 3 способоа обойти проблему. Самый первый, собирать с AnyCPU я попробовал, применил для  всего решения. Это не помогло.

Остальные два решения

Notes on Workarounds 2 and 3:Workarounds 2 and 3 apply specifically to the scenario where a project targeting .NET 3.5 has a .resx file that references a 32-bit assembly. There is currently no workaround for targeting 4. 0 and trying to reference a 32-bit assembly from 64-bit MSBuild or vice versa – aside from changing to use the MSBuild.exe of the architecture you’re targeting.Please be aware that by forcing ResGen.exe to execute as 32-bit, you are essentially introducing the opposite problem: ResGen.exe will now error if you try to load 64-bit architecture-specific reference assemblies in it.
Workaround 2:Make ResGen.exe 32-bit by:1. Cd “%ProgramFiles(x86)%Microsoft SDKsWindowsv7.0ABin”2. Corflags /32Bit+ /Force ResGen.exeHowever, since our current build process has a heuristic that assumes that ResGen.exe is MSIL, just doing the above step will cause a different error (“The specified task executable "ResGen.exe" could not be run. The handle is invalid”) unless you inform GenerateResource that ResGen.exe is now 32-bit via setting the property “ResGenToolArchitecture” to “Managed32Bit”. This can be accomplished by doing one of the following:

1. Adding <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> to a PropertyGroup in the project file of any project that generates resources targeting . NET 3.5 – since the corflags trick affects the bitness of ResGen.exe on a system-wide level, the property must be set for all affected projects as well.

2. OR If running MSBuild.exe directly, passing it using the global property switch: ‘/p:ResGenToolArchitecture=Managed32Bit’

3. OR Setting it as an environment variable in the command window that MSBuild.exe is run from or the VS 2010 IDE is opened from: ‘set RESGENTOOLARCHITECTURE=Managed32Bit’

Pros: Doesn’t require changing the architecture of the referenced assembly

Cons: More complicated; requires baking the workaround either into the project file, or into your build system as a whole.
Workaround 3:

Force the CLR to load all MSIL applications as 32-bit by:

1. Cd “%windir%\Microsoft.NET\Framework64\v2.0.50727”

2. Ldr64.exe setwow

Then, since this also is a way to force ResGen.exe to execute as though it’s a 32-bit process, you must also go through the second part of Workaround 2 (setting ResGenToolArchitecture=Managed32Bit).

Pros: Doesn’t require changing the architecture of the referenced assembly

Cons: Affects how the CLR works for the entire machine. Also the same cons as Workaround 2.

я не стал пробовать, т.к. возникли некоторые сомнения. Попытался разобраться с файлом ресурсов MainForm.resx, который вызывает ошибку. Декодировал ресурс из base64 в простой текст и увидел что в самом закодированном ресурсе стоит ссылка на сборку System.Windows.Forms, Version=4.0.0.0 и это при том что в свойствах самого проекта был задан Target Framework = 2.0.

(Примечание:При декодировании base64 столкнулся с проблемой).

Копаю дальше. Нашел баг на Microsoft Connect который гораздо ближе по смыслу чем первая найденная статья. Человек подтверждает догадки

Posted by DanyR on 28.10.2010 at 0:48
The patch from Ed Hartley has the following internal effect:

I decoded an ImageStream with «j00L» and «j0yL» and found out, that in VS2010 MS is serializing ImageLists with a reference to System. Windows.Forms, Version=4.0, even when the project is set to 2.0. The tip changes exactly this («0» to «y» changes «4» to «2»).

Please, please, please fix this ASAP.

Daniel

Там же к статье приложена программка для правки файлов ресурсов Set2010ImageListsToNET2.zip которая правит ссылку в ресурсном файле на System.Windows.Forms, Version=2.0.0.0.

Короче нужно те ресурсные файлы которые вызывают ошибку при сборке обработать этой прогой — это помогает.

.net - «Была предпринята попытка загрузить программу с неправильным форматом», даже если платформы одинаковые

Я вызываю функции из 32-битной неуправляемой DLL в 64-битной системе. Я получаю:

BadImageFormatException: была предпринята попытка загрузить программу с неправильным форматом. (Исключение из HRESULT: 0x8007000B)

Сначала мои проекты были настроены на платформу Any CPU, поэтому я изменил их оба на x86, но эта ошибка все еще возникает. Это действительно единственное исправление, которое я знаю для этого.

Библиотеки DLL не повреждены или что-то в этом роде, потому что я могу использовать их с другими программами (для которых у меня нет исходного кода). Я думал, что, возможно, это не находит зависимости, но я проверил, и они все там. Кроме того, не выдаст ли в этом случае DllNotFoundException ?

Что еще я могу сделать? И прежде чем вы скажете: «Используйте вместо этого 64-разрядную неуправляемую DLL», позвольте мне указать, что ее нет. ;)

  • .net
  • 64-разрядная
  • pinvoke
  • 32-разрядная
  • badimageformateException

4

Если вы попытаетесь запустить 32-разрядные приложения на IIS 7 (и/или на машине с 64-разрядной ОС), вы получите ту же ошибку. Итак, в IIS 7 щелкните правой кнопкой мыши пул приложений, перейдите к «дополнительным настройкам» и измените «Включить 32-разрядные приложения» на «ИСТИНА».

Перезапустите ваш сайт, и он должен работать.

7

Каким-то образом флажок Build в Configuration Manager был снят для моего исполняемого файла, поэтому он все еще работал со старой сборкой Any CPU. После того, как я это исправил, Visual Studio пожаловалась, что не может отладить сборку, но это было исправлено перезапуском.

4

В Visual Studio щелкните правой кнопкой мыши проект -> На левой панели щелкните вкладку Build ,

под Platform Target выберите x86 (или, в более общем случае, архитектуру , соответствующую библиотеке, на которую вы ссылаетесь)

5

Если вы сталкиваетесь с этой ошибкой, когда нажимаете кнопку с зеленой стрелкой для запуска приложения, но все еще хотите запустить приложение в 64-разрядной версии. Вы можете сделать это в VS 2013, 2015, 2017 и 2019

Перейдите: Инструменты > Параметры > Проекты и решения > Веб-проекты > Использовать 64-разрядную версию IIS Express

Или вы можете сделать это для каждого проекта в Project Properties > Web > Bitness

7

У меня тоже была эта проблема. Перепробовал все советы здесь, но они не помогли.

Я нашел еще одну вещь для проверки, которая исправила это для меня. В Visual Studio щелкните проект правой кнопкой мыши и откройте «Свойства». Нажмите на вкладку «Компиляция» (или «Сборка»), а затем нажмите «Дополнительные параметры компиляции» внизу.

Проверьте раскрывающийся список «Целевой ЦП». Он должен соответствовать «Платформе», которую вы создаете. То есть, если вы строите «Любой ЦП», тогда «Целевой ЦП» должен указывать «Любой ЦП». Просмотрите все свои платформы, сделав их активными, и проверьте этот параметр.

3

Если вы используете Any CPU , вы можете столкнуться с этой проблемой, если установлен флажок Prefer 32-bit :

Убедитесь, что вы сняли этот флажок на вкладке Build свойства проекта!

5

В моем случае я использовал родную DLL на C#. Эта DLL зависела от пары других отсутствующих DLL. Как только эти другие DLL были добавлены, все заработало.

1

  1. Перейдите: Инструменты → Параметры → Проекты и решения → Веб-проекты → Используйте 64-разрядную версию IIS Express.
  2. Изменить настройку ниже для проекта веб-службы:

1

Немного не по теме этого поста, но поиск этого сообщения об ошибке привел меня сюда.

Если вы выполняете сборку через командную систему и получаете эту ошибку, на вкладке процесса определения сборки есть параметр «Платформа MSBuild». Если для этого параметра установлено значение «Авто», вы можете столкнуться с этой проблемой. Изменение его на «X86» также может устранить ошибку.

1

У нас была аналогичная проблема, и нам удалось ее исправить, установив цель платформы на x86.

2

В Visual Studio 2019 у меня была аналогичная проблема, когда я хотел запустить тесты (MSTest непосредственно из VS). В моем случае у меня была только собственная DLL x64, и я получил это сообщение об ошибке. Сначала я подумал, что это потому, что Visual Studio работает как x86, но эта страница помогла мне решить проблему:

Запустить юнит-тест как 64-битный процесс

Он говорит:

  1. Настройте свои проекты на любой процессор
  2. Явно определить архитектуру процессора

Я сделал и то, и другое (я явно поставил x64), и тогда мои тесты начали работать.

1

Основываясь на ответе @paibamboo

Он сказал: Перейдите: Инструменты > Параметры > Проекты и решения > Веб-проекты > Используйте 64-разрядную версию IIS Express

Мой коллега установил этот флажок (он явно искал его), но у него было указанное сообщение об ошибке. Через несколько часов он снял флажок и снова установил его. О чудо: теперь код работает успешно.

Кажется, есть два места, где сохраняется состояние этого ящика, который рассинхронизировался. Отменив и перепроверив его, он снова синхронизировался.

Вопрос для более знающих пользователей: было ли обновление или что-то на прошлой неделе (для VS 2015), которое рассинхронизировало состояния?

Также см. этот ответ, который решил ту же проблему для меня.

Автор: Luis Mack, 12.05.2010, 8:50 Я обнаружил ту же проблему, только для конкретного проекта при компиляции на 64-битной машине. Исправление, которое, КАЖЕТСЯ, работает, заключается в том, чтобы вручную изменять один символ в потоке изображения КАЖДЫЙ РАЗ, когда пользовательский элемент управления или форма редактируются в конструкторе

.
 AAEAAAD/////AQAAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w 

Изменить на

 AAEAAAD/////AQAAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w 

То есть 00LjAuMC4w назад к 0yLjAuMC4w в конце строки (00 назад к 0y)

0

В моем случае это было неправильное содержимое файла. DLL была загружена из Интернета, но содержимое DLL было HTML-страницей: D Попробуйте проверить, является ли это двоичным файлом, если это похоже на правильную DLL :)

В моем случае я использую крошечный .exe, который перезагружает указанные DLL через Reflection. Поэтому я просто делаю эти шаги, которые спасают мой день:

В свойствах проекта в обозревателе решений на вкладке сборки я выбираю целевую платформу x86

В моем случае я запускал тесты через MSTest и обнаружил, что развертываю для теста как 32-разрядную, так и 64-разрядную DLL каталог. Программа отдавала предпочтение 64-битной DLL и вызывала ее сбой.

TL;DR Убедитесь, что для тестов вы развертываете только 32-разрядные библиотеки DLL.

Если вы импортируете неуправляемую DLL, используйте

 CallingConvention = CallingConvention.Cdecl 

в вашем методе импорта DLL.

Я решил эту проблему способом "Windows". Проверив все свои настройки, очистив решение и пересобрав его, я просто закрываю решение и снова открываю его. Затем это сработало, поэтому VS, вероятно, не избавился от чего-то во время очистки. Когда логические решения не работают, я обычно прибегаю к нелогичным (или кажущимся нелогичным). Винда меня не подводит. :)

Мне удалось решить эту проблему, сопоставив мою версию сборки с версией .NET на сервере.

Я дважды щелкнул файл .exe, чтобы посмотреть, что произойдет, и он сказал мне установить 4.5....

Итак, я понизил версию до 4.0, и это сработало!

Убедитесь, что ваши версии совпадают. Он отлично работал на моем устройстве разработки, но на сервере была более старая версия .NET.

У нас была такая же проблема в ядре .NET. Решение состояло в том, чтобы загрузить 32-разрядную среду выполнения .netcore и указать цель вашего проекта x86

. В файл csproj добавить

  <целевая платформа>x86  <Группа свойств> $(MSBuildProgramFiles32)\dotnet\dotnet  

Это использовалось для компьютера с Windows, вам нужно было настроить пути и т. д. для Linux/OSX

В моем случае у меня не было правильного проекта, установленного в качестве стартового проекта. Я зашел в настройки решения и выбрал правильный проект запуска, и он сработал

В моем случае такая же ошибка произошла после публикации. Я публиковал ранее с другой конфигурацией платформы.

Решение состояло в том, чтобы сначала очистить папку публикации, и тогда это сработало.

(в качестве альтернативы установите для параметра «удалить существующие файлы» значение true)

Другая причина, которая может вызвать это исключение, — отсутствие распространяемых компонентов C++ для целевой платформы вашей библиотеки DLL. Мне было трудно это выяснить при тестировании на виртуальной машине.

Для ядра .net убедитесь, что Ijwhost.dll находится в выходном каталоге, иногда он не копируется, и это вызовет ошибку. См. https://github.com/dotnet/runtime/issues/38231, а также https://stackoverflow.com/a/58773266/9665729

. Также обратите внимание, что версия используемого DLL-файла (файлов) (в моем случае «WebView2Loader. dll»), который используется, очень важен. У меня была почти такая же проблема с «Microsoft.WebView2.FixedVersionRuntime.101.0.1210.39»..x64», когда я пытался использовать компонент WebView2 в оснастках MMC с типами «HTMLView» или «FormView».

Я просто скопировал указанный файл dll по правильному пути, доступному для проекта (вы просто поместите его рядом с выходными файлами вашего проекта, чтобы протестировать его), а затем браузер WebView2 начал функционировать, как и ожидалось.Сообщения об ошибках Microsoft иногда (по крайней мере, в моем случае) немного вводили в заблуждение и не передавали достаточной и точной информации.

Я получил сообщение «BadImageFormatException», которое обычно возникает, когда вы смешиваете цели платформы (например, используете файл dll, скомпилированный в X64, в приложении, предназначенном для x86, или наоборот) или смешиваете собственный код и .NET, но это не было моей проблемой в все. Я надеюсь, что это поможет тем, кто может застрять.

У меня также была эта проблема, когда я хотел вызвать родную DLL из C#/WPA. Следующие шаги работают для моего проекта. Свойства-> Сборка-> Целевая платформа x64/x86 (измените эту опцию, тогда она будет работать).

.net - System.BadImageFormatException Предпринята попытка загрузить программу с неверным форматом

спросил

Изменено 6 месяцев назад

Просмотрено 135 тысяч раз

Я пишу подключаемый модуль для другой программы, основанной на общедоступном API .NET. Обычно эти плагины создаются путем создания библиотеки DLL классов, которая ссылается на сборку API. Затем создается класс команд путем наследования от базового класса команд в сборке API. Затем приложение настраивается на ссылку на DLL-файл подключаемого модуля, а затем также отвечает за фактический запуск пользовательского класса команд, когда пользователь запрашивает его.

Однако теперь я пытаюсь автоматизировать генерацию некоторого кода с помощью System.CodeDOM и хочу создать простое консольное приложение, которое автоматически генерирует новые типы классов на основе типов в сборке API.

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

Исключение System.BadImageFormatException было необработанное сообщение: не удалось загрузить файл или сборка RevitAPI, Версия = 2011.0.0.0, культура = нейтральная, PublicKeyToken=null' или один из его зависимости. Была предпринята попытка загрузить программу с некорректным формат.

Обычно мне нужно установить целевую структуру сборки плагина на 3.5. Однако теперь я обнаружил, что указанная выше ошибка исчезает, если я устанавливаю целевую структуру своего консольного приложения на 2.0. Однако мое консольное приложение уже ссылается на другие мои библиотеки классов, целевая платформа которых установлена ​​на 3. 5. И я действительно не хотел бы переписывать их вокруг фреймворка 2.0.

  • .net
  • badimageformateexception
  • revit
  • целевая структура
  • revit-api

1

Возможно несоответствие 32-64 бит.

Если вы работаете в 64-разрядной ОС, сборка RevitAPI может быть скомпилирована как 32-разрядная, а ваш процесс — как 64-разрядный или «любой процессор».

Или RevitAPI скомпилирован как 64-разрядный, а ваш процесс скомпилирован как 32-разрядный или «любой ЦП» и работает в 32-разрядной ОС.

6

Если вы используете IIS, Перейти к пулу приложений Выберите тот, который использует ваш сайт, и нажмите «Дополнительные настройки». Убедитесь, что для параметра «Включить 32-разрядные приложения» установлено значение «Истина 9».0003

1

У меня возникли проблемы с новой установкой VS с проектом x64 — для Visual Studio 2013, Visual Studio 2015 и Visual Studio 2017:

 Инструменты -> Параметры -> Проекты и решения -> Веб-проекты -> Установите флажок «Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов». 

3

Эти предложения верны, но я хотел добавить примечание. Я застрял просто потому, что у меня было несколько конфигураций публикации. Я редактировал «Отладка — любой процессор», а затем развертывал конфигурацию «Отладка — x64». Убедитесь, что вы редактируете и развертываете одну и ту же конфигурацию. Убедитесь в этом, щелкнув вкладку «Настройки» после того, как вы начнете публикацию, и появится диалоговое окно «Публикация в Интернете». Убедитесь, что он соответствует конфигурации, которую вы редактировали. (Это 4 часа моей жизни, которые я никогда не верну!)

1

У меня была такая же проблема при запуске моего программного обеспечения на другом компьютере. На моем компьютере разработчика (Windows 7) у меня была установлена ​​Visual Studio 2015, целевым компьютером была чистая установка Windows 10 (установлен .Net). Я также протестировал его на другом чистом ПК с Windows 7, включая . Net Framework. Однако на обоих целевых компьютерах мне нужно было установить распространяемый пакет Visual C++ для Visual Studio 2015 для x86 или x64 (зависит от того, для чего создается ваше приложение). Это уже было установлено на моем компьютере разработчика.

В моем приложении использовалась библиотека C, которая была скомпилирована в приложение C++ с использованием параметров /clr и /TP в Visual Studio. Кроме того, приложение предоставляло функции C# с помощью сигнатур метода dllexport. Не уверен, что интеграция с С# привела к этой ошибке или приложение на С++ дало бы мне то же самое.

Надеюсь, это кому-нибудь поможет.

Для запуска на любом 62-битном или 32-битном процессоре выполните следующие действия: Щелкните правой кнопкой мыши имя проекта в обозревателе решений > Свойства > Построить. и иметь их в разделе «Конфигурация»: Активный (Выпуск) , Платформа: Активный (Любой ЦП) и Цель: x86 . и рядом с кнопкой «Выполнить». Выберите опцию Release и Any CPU из опций. А затем сохраните его и запустите.

У меня та же проблема, что и у меня. Я только что скачал 32-битную dll и добавил ее в свою папку bin, это решило мою проблему

Я пытался загрузить dll с архитектурой x86. в проекте С# я описал целевую платформу как x86 и избавился от ошибки

Также обратите внимание, что версия используемого DLL-файла(ов) по ссылке очень важна. У меня была почти такая же проблема с «Microsoft.WebView2.FixedVersionRuntime.101.0.1210.39.x64», когда я пытался использовать компонент WebView2 в оснастках MMC с типами «HTMLView» или «FormView».

Я просто скопировал файл dll (в моем случае WebView2Loader.dll, версия 1.0.1248.0, размер = 157640 байт) по правильному пути, который был доступен для проекта (вы можете просто поместить его рядом с выходными файлами проекта, чтобы проверить это), а затем браузер WebView2 начал функционировать должным образом. Сообщения об ошибках Microsoft иногда (по крайней мере, в моем случае) немного вводили в заблуждение и не давали достаточной и точной информации.


Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: