System.Data.Sqlite.dll 32 бит против 64 бит С#

У меня есть сервисная библиотека WCF, созданная с использованием С# и system.data.sqlite.dll x64. Конфигурация сборки — Any CPU. Это работает нормально. Но когда я меняю system.data.sqlite.dll на x86-битную версию, для любой конфигурации ЦП он успешно строится, но когда я запускаю методы wcf, он выдает ошибку, для конфигурации сборки x86 он строится успешно, но дает следующую ошибку при отладке с помощью wcftestclient.

System.BadImageFormatException: Could not load file or assembly 'file:///C:\Users\lala\Desktop\New folder\New folder\CoreServiceWCF\CoreServiceWCF\CoreServiceWCF2\bin\x86\Debug\VplusCoreServiceWCF.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'file:///C:\Users\lala\Desktop\New folder\New folder\CoreServiceWCF\CoreServiceWCF\CoreServiceWCF2\bin\x86\Debug\VplusCoreServiceWCF.dll'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)

=== Pre-bind state information ===
LOG: User = lala-PC\lala
LOG: Where-ref bind. Location = C:\Users\lala\Desktop\New folder\New folder\CoreServiceWCF\CoreServiceWCF\CoreServiceWCF2\bin\x86\Debug\VplusCoreServiceWCF.dll
LOG: Appbase = file:///C:/Users/lala/Desktop/New folder/New folder/CoreServiceWCF/CoreServiceWCF/CoreServiceWCF2/bin/x86/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\Users\lala\Desktop\New folder\New folder\CoreServiceWCF\CoreServiceWCF\CoreServiceWCF2\bin\x86\Debug\VplusCoreServiceWCF.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///C:/Users/lala/Desktop/New folder/New folder/CoreServiceWCF/CoreServiceWCF/CoreServiceWCF2/bin/x86/Debug/VplusCoreServiceWCF.dll.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

Кто-нибудь поможет мне решить эту проблему?


person Proceso    schedule 27.08.2012    source источник
comment
32- и 64-битные исполняемые файлы несовместимы. 32-битные программы не могут загружать 64-битные библиотеки DLL и наоборот. Насколько мне известно, это универсальное ограничение (т. е. оно не будет работать ни на одной платформе).   -  person Wug    schedule 27.08.2012
comment
да правильно. Мой простой вопрос: я не могу заставить работать wcf с 32-битной версией system.data.sqlite.dll.   -  person Proceso    schedule 27.08.2012


Ответы (1)


Когда сборка создается для любого процессора, она будет использовать наилучшую конфигурацию компьютера, на котором вы работаете, это означает, что она будет работать в 64-битном режиме, если у вас 64-битная Windows, и она будет работать в 32-битном режиме, если она на 32-битной. биты Windows, проблема, похоже, в этой сборке: VplusCoreServiceWCF.dll, поэтому я бы порекомендовал вам сначала проверить разрядность этой сборки и посмотреть, правильная ли она (в вашем случае, вероятно, 64 бита)

Изменить: копаясь, я обнаружил, что тестовый клиент WCF работает только в 64-битном режиме, поэтому вам может потребоваться принудительно установить его на 32-битный, для этого вы можете найти необходимую информацию здесь: Я не могу скомпилировать стандартную библиотеку служб WCF в формате x86

person Rafael    schedule 27.08.2012
comment
VplusCoreServiceWCF.dll — это результат сборки этого проекта библиотеки служб wcf. Я получаю указанную выше ошибку, когда пытаюсь отладить ее с помощью wcftestclient. - person Proceso; 27.08.2012
comment
Вам нужно заставить тестовый клиент WCF работать в 32-битном режиме, проверьте редактирование. - person Rafael; 27.08.2012
comment
да, это действительно полная помощь, спасибо за ответ, Рафаэль :) - person Proceso; 27.08.2012