Не удалось загрузить файл или сборку... или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом (файл .resx)
При компиляции или попытке запуска приложения на 64-разрядной версии Windows 7 появляется следующее сообщение об ошибке. Я просматривал Интернет, и у многих людей такое же сообщение об ошибке. Однако ни одно из решений не касается моей проблемы или ситуации. Я использую Visual Studio 2010.
Сообщение об ошибке
Ошибка 38 Не удалось загрузить файл или сборку:///D:/Projects/Проекты Windows/Weld/Components/FileAttachments/FileAttachments/FileAttachments/bin/x86/Debug/FileAttaching.dll 'или одна из его зависимостей, Была сделана попытка загрузить программу с неправильным форматом. Строка 1212, позиция 5. D:\Projects\Проекты Windows\Weld\Weld\Weld.UI\frmMain.resx 1212 5 Weld.UI
Описание
ОК, поэтому у меня есть два проекта: проект пользовательского интерфейса и проект FileAttachment. Проект UI имеет ссылку на проект FileAttachment. Когда я компилирую проект пользовательского интерфейса в режиме "Любой процессор", все работает отлично, и он запускается. Я предполагаю, что "любой процессор" будет работать в 64-битном режиме, когда я скомпилирую, поскольку это платформа, которую я использую.
Я хочу запустить/скомпилировать как x86, поэтому я пытаюсь это сделать. Я изменяю конфигурацию для всех проектов на x86 и проверяю, что эти конфигурации компилируются на x86. Я компилирую и получаю ошибку, как указано выше.
Мне кажется странным, что он компилируется и отлично работает в 64-битном, но не 32-битном. Однако при компиляции и развертывании для пользователей как "Любой процессор", если у этих пользователей есть x86, он по-прежнему работает для них без каких-либо проблем. Я просто не могу скомпилировать или запустить как x86 на моем ПК. Опять же, я могу скомпилировать как любой процессор и развернуть на 32-битный ПК без проблем.
Ни один из проектов не ссылается на любые 64-разрядные DLL файлы. Оба проекта проверяются для таргетинга на 32-разрядные DLL файлы и сборки .NET Framework.
Мне нужно скомпилировать и запустить это локально в 32-битном режиме. Мне нужно редактировать/продолжать JIT, между прочим.
Вот строка кода в файле resx, которая вызывает проблему:
<data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
....{mime data}....
</data>
Файл resx проверяется на создание .NET 2.0 и ссылается только на сборки .NET 2.0, а не на версии .NET 4.0.
Как я могу исправить эту проблему? Я искал Интернет и нашел сотни людей с тем же сообщением об ошибке, но другая проблема.
Ответы
Ответ 1
Кажется, это ошибка VS 2010 с списками изображений. См. https://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020?wa=wsignin1.0
Я смог использовать обходной путь, указанный для того, чтобы заставить его работать для меня.
Отправлено Luis Mack - 05/12/2010 в 8:50
Я нашел ту же проблему, только для конкретного проекта при компиляции на 64-битной машине. Исправлено, что SEEMS работает, чтобы вручную изменить один символ в потоке изображения. КАЖДЫЙ РАЗ. Пользовательский контроль или форма редактируются в дизайнере
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
Изменить на
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
Это 00LjAuMC4w назад к 0yLjAuMC4w в конце строки (00 назад к 0y)
Джим
Ответ 2
Моим самым простым решением было просто перейти в строку с ошибкой и изменить base64 на base32
<data name="myGUIcontrol.myObj" mimetype="application/x-microsoft.net.object.binary.base32">
... block of binary here
Но я хотел бы найти способ, чтобы это не происходило каждый раз, когда я вносил изменения в дизайнера. Может быть, атрибут для класса, который заставляет VS10 сделать его base32??
Ответ 3
Я столкнулся с одной и той же проблемой с одной из моих программ. Проблема в том, что по какой-то причине Visual Studio, похоже, генерирует 64-битные блоки данных для некоторых свойств управления GUI, которые затем не могут загружаться при компиляции на x86.
В моем случае я могу решить эту проблему, удалив пробные блоки данных из файла resx вместе с строками кода линии в файле cs.designer, которые ссылаются на эти блоки. Я могу сделать это, поскольку соответствующие строки исходного кода, которые назначают ссылочное свойство, являются избыточными и не нужны. Единственное, что раздражает то, что я должен повторять эти исправления каждый раз, когда я изменяю что-либо в дизайнере, поскольку Visual Studio затем добавляет обратно в плохой код.
Ответ 4
Мы столкнулись с той же проблемой на прошлой неделе, и мы нашли хорошее решение.
Вам нужно открыть файл .resx
в конструкторе и установить общедоступный метод accessmodifier без генерации кода.