Не удалось загрузить файл или сборку ... или одну из ее зависимостей. Предпринята попытка загрузить программу с неверным форматом (файл .resx). - PullRequest
36 голосов
/ 07 июня 2010

Я получаю следующее сообщение об ошибке при компиляции или попытке запустить мое приложение в 64-разрядной версии Windows 7. Я искал в Интернете, и у многих людей появляется одно и то же сообщение об ошибке. Однако ни одно из решений не решает мою проблему или ситуацию. Я использую Visual Studio 2010 .

Сообщение об ошибке

Ошибка 38 Не удалось загрузить файл или сборку 'file: /// D: / Проекты / Проекты Windows / Сварка / Компоненты / FileAttachments / FileAttachments / FileAttachments / bin / x86 / Debug / FileAttaching.dll' или одна из ее зависимостей , Была предпринята попытка загрузить программу с неверным форматом. Линия 1212, позиция 5. D: \ Проекты \ Проекты Windows \ Weld \ Weld \ Weld.UI \ frmMain.resx 1212 5 Weld.UI

Описание

ОК, у меня есть два проекта, проект пользовательского интерфейса и проект FileAttachment. Проект пользовательского интерфейса имеет ссылку на проект 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.

Как я могу исправить эту проблему? Я искал в Интернете и нашел сотни людей с тем же сообщением об ошибке, но с другой проблемой.

Ответы [ 4 ]

33 голосов
/ 10 июня 2010

Похоже, это ошибка VS 2010 со списками изображений. Смотри https://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020?wa=wsignin1.0

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


Опубликовано Луисом Маком 5/12/2010 в 8:50 Я обнаружил ту же проблему, только для конкретного проекта при компиляции на 64-битной машине. Исправление, которое SEEMS работает, состоит в том, чтобы вручную изменять один символ в потоке изображения КАЖДЫЙ РАЗ, когда пользовательский контроль или форма редактируются в конструкторе

AAEAAAD ///// AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w

Изменить на AAEAAAD ///// AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w

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


Jim

7 голосов
/ 14 июня 2011

Моим самым простым решением было просто перейти в строку с ошибкой и изменить base64 на base32

<data name="myGUIcontrol.myObj" mimetype="application/x-microsoft.net.object.binary.base32">
... block of binary here

Но я бы хотел найти способ, чтобы это не происходило каждый раз, когда я вносил изменения в дизайнера. Может быть, атрибут для класса, который заставляет VS10 сделать его base32 ??

1 голос
/ 31 января 2012

Мы столкнулись с той же проблемой на прошлой неделе, и мы нашли хороший обходной путь.

Вы должны открыть файл .resx в Designer и установить для модификатора доступа значение public (не генерировать код).

1 голос
/ 08 июня 2010

Я столкнулся с той же проблемой с одной из моих программ. Проблема в том, что по некоторым причинам Visual Studio генерирует 64-битные блоки данных для некоторых свойств элемента управления GUI, которые затем невозможно загрузить при компиляции в x86.

В моем случае я могу обойти эту проблему, удалив блоки пробламатических данных из файла resx вместе со строками кода строки в файле cs.designer, которые ссылаются на эти блоки. Я могу сделать это, так как соответствующие строки исходного кода, которые присваивают ссылочное свойство, являются избыточными и не нужны. Единственное, что раздражает, это то, что мне приходится повторять эти исправления каждый раз, когда я что-то изменяю в конструкторе, а затем Visual Studio добавляет обратно в плохой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...