2010-02-09 3 views
3

Я использую Visual Studio 2010, работающий в Windows 7 X64 Я пытался создать простую реализацию двусторонней связи WCF. К сожалению, я застрял очень быстро.System.BadImageFormatException - не может решить его

У меня есть 3 проекта: - Сервис библиотека с простой контракт на оказание услуг и реализации - ServiceHost: хостинг библиотеку услуг через SelfHosting - Клиент: Потребляя метод из службы WCF

Что-то я сразу заметил, что в библиотеке службы был любой процессор в качестве платформы. Остальные два имели x86 как платформу. В этот момент я понятия не имел, что я получу эту ошибку, так что это меня действительно не беспокоило.

Затем я запустил сервисную библиотеку, используя встроенный wcfsvchost.exe. Служба была размещена без проблем. Затем я хотел разместить свою службу через свой собственный хост. Здесь я получил свой первый опыт работы с System.BadImageFormatException. Я понятия не имел, что это было в тот момент. Так что я застрял и сделал какой-то поисковик. Если я правильно понимаю, платформа всех DLL и т. Д. Должна быть одинаковой. если кто-то может объяснить мне немного лучше. Пожалуйста, сделай.

Во всяком случае, я бы поменял платформу сервисной библиотеки, потому что у нее был любой процессор вместо x86. Поэтому я попытался сделать это с помощью настроек Project и менеджера конфигурации. Но проблема в том, что у меня не было возможности изменить ее. Затем я выгрузил проект, посмотрел, как выглядел другой .csproj, и изменил там значения. Перезагрузили его, и все было в порядке. Теперь у него была правильная платформа, x86. Итак, давайте проверим запуск сервисной библиотеки. BOOM System.BadImageFormatException

System.BadImageFormatException: Не удалось загрузить файл или файл сборки: /// C: \ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll или одной из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом. Имя файла: 'файл: /// C: \ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll' в System.Reflection.RuntimeAssembly._nLoad (AssemblyName имя_файла, Строка CodeBase, Доказательства assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, булева throwOnFileNotFound, булева forIntrospection, булевы suppressSecurityChecks) на System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, булевой forIntrospection, булевы suppressSecurityChecks) на System.Reflection.Assembly.Load (AssemblyName assemblyRef) в Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly (String svcAssemblyPath)

=== Информация о состоянии предварительной привязки === LOG: Пользователь = Sven-PC \ Sven LOG: Где-ref связывается. Location = C: \ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll LOG: Appbase = file: /// C:/Users/Sven/documents/visual studio 2010/Проекты/DuplexDemo/CustomerService2/bin/Debug LOG: Initial PrivatePath = NULL

Вызов сборок: (Неизвестно).

LOG: Это связывание начинается с контекста загрузки LoadFrom. WRN: Исходное изображение не будет исследовано в контексте LoadFrom. Собственное изображение будет проверяться только в контексте нагрузки по умолчанию, например, с Assembly.Load(). LOG: Использование файла конфигурации приложения: C: \ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll.config LOG: Использование файла конфигурации хоста: LOG: Использование конфигурации компьютера файл из C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.21006 \ config \ machine.config. LOG: попытка загрузки нового файла URL: /// C:/Users/Sven/documents/visual studio 2010/Projects/DuplexDemo/CustomerService2/bin/Debug/CustomerService2.dll. ERR: Не удалось завершить настройку сборки (hr = 0x8007000b). Исследование прекращено.

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

Может ли кто-нибудь сказать мне, что происходит? Не думайте, что у кода есть ошибки, потому что это обычный ванильный WCF и до его работы. Код также работает при создании в установке x32

Пожалуйста, помогите мне

+0

ли вы найти решение этой проблемы? – newman

ответ

3

Это, возможно, очень длинный выстрел в темноте, но вы могли бы запустить приложение бассейн в 32-битном режиме?

Я предполагаю, что вы не хотите этого делать, потому что кажется, что вы какое-то время смотрели на эту проблему?

Способ, которым я исправил аналогичную проблему, был один за другим через библиотеки, которые я использовал до тех пор, пока не нашел оскорбительную 3-стороннюю библиотеку, не совместимую с 64-битной.

С наилучшими пожеланиями Рихан

Смежные вопросы