Система.ИО.FileLoadException: не удалось загрузить файл или систему сборки.Данные.Базы данных SQLite

(это дубликат вопрос, который был задан в stackoverflow.com. Я читал ответы. Я пробовал решения, но это не решило мою проблему. Я собираюсь объяснить, в чем моя проблема и что я сделал).

это моя проблема:

мое приложение использовало систему.Данные.Базы данных SQLite.файл DLL. Я ссылался на него и нормально работал на своем компьютере, но он не работал на другом компьютере. Это сообщение об ошибке:

система.ИО.FileLoadException: не удалось загрузить файл или сборку - Система.Данные.Базы данных SQLite версии=1.0.88.0, культуры=нейтральный, PublicKeyToken=db937bc2d44ff139' или одна из его зависимостей. Приложение не удалось запустить, потому что его бок о бок
неверная конфигурация. Пожалуйста, смотрите событие приложения войдите или используйте программу командной строки sxstrace.exe инструмент для более подробной информации.
(Исключение из HRESULT: 0x800736B1) имя файла: - Система.Данные.Базы данных SQLite, Версия=1.0.88.0, культура=нейтральный, PublicKeyToken=db937bc2d44ff139' ---> Система.Во время выполнения.InteropServices.Исключение comexception (0x800736B1): Приложение не удалось запустить, потому что его бок о бок
неверная конфигурация. См. журнал событий приложения или используйте программу командной строки sxstrace.exe инструмент для более подробной информации.
(Исключение из HRESULT: 0x800736B1) в Симпб.конфиг.PrepareDatabase() на Симпб.конфиг.InitializeProgram() в Симпб.Программа.Main ()

на моем компьютере работает Windows 7 32 бит, Visual Studio 2010.

на другом компьютере также работает Windows 7 32 бит, без установленной Visual Studio.

что я пробовал:

Попытка 1: убедитесь, что приложение построено с помощью выпуск + x86 и приложение строится с целевой платформой: .NET Framework 2.0. Сделанный.

Попытка 2: убедитесь, что приложение ссылается на правильную сборку системы.Данные.SQLite, который является x86 + .Net Framework 2.0 (sqlite-netFx20-binary-Win32-2005-1.0.88.0). Сделал

Попытка 3: попробуйте эти коды в приложении.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

и

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true"/>
  </runtime>
</configuration>

и

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

сделано.

попытка 4: попробуйте отключить контроль учетных записей пользователей на другом компьютере. Сделанный.

Попытка 5: попробуйте установить Visual C++ Runtime на другом компьютере (я устанавливаю распространяемый пакет Visual Microsoft Visual C++ Runtime 2010 (x86), также попробовал 2005 verson.). Сделанный.

попытка 6: попробуйте переустановить .NET Framework 2.0 SP2. Ошибка получения:

вы должны использовать "включить или выключить функции Windows" на панели управления, чтобы установка или настройка Microsoft .NET Framework 2.0 С пакетом обновления 2.

обновление: (после прочтения ответов и комментариев)
попытка 7: убедитесь, что система.Данные.Базы данных SQLite.DLL находится в выходной папке bin. Сделал

попытка 8: дважды подтвердите, что на другом компьютере работает 32bit Windows 7. Сделал

попытка 9: измените объявление HintPath .файл csproj:
Измените это:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>E:Developer SoftSQLitesqlite-netFx20-binary-bundle-Win32-2005-1.0.88.0System.Data.SQLite.dll</HintPath>
</Reference>

для этого:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>..System.Data.SQLite.dll</HintPath>
</Reference>

готово за попытку 9.

после вышеуказанных попыток результат все тот же. Приложение может работать с моего компьютера нормально и не удалось запустить на другом компьютере.

это бесплатная программа с открытым исходным кодом,Простая Телефонная Книга. Я зафиксировал и загрузил последний исходный код на сервер управления версиями на:
http://simpb.codeplex.com/SourceControl/list/changesets (номер набора изменений: fd847ac6c406)

5 ответов


сборка не может быть расположена из-за объявления HintPath в ваш .файл csproj:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>E:\Developer Soft\SQLite\sqlite-netFx20-binary-bundle-Win32-2005-1.0.88.0\System.Data.SQLite.dll</HintPath>
</Reference>

это работает на вашей машине, потому что у вас действительно есть .dll файлы в этом месте. Однако другой человек может захотеть использовать систему.Данные.Базы данных SQLite.DLL файл размещен в корневом каталоге репозитория. Поскольку это на один уровень выше .csproj, вы можете использовать относительный путь, например:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>..\System.Data.SQLite.dll</HintPath>
</Reference>

и он должен работать нормально.


Я решил проблему. Вот как я решаю:

краткий сюжет:
Используйте более старую версию системы.Данные.Базы данных SQLite. Новая версия подозревается в наличии ошибок (я мог ошибаться).

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

Да, я изменил версию системы.Данные.Базы данных SQLite.

старая версия системы.Данные.SQLite используется этой программой В1.0.66. Новая версия, которую я использовал, является последней версией:В1.0.88, освобожден 8 августа. (Да, речь идет о 4 дн. назад С сегодняшнего дня). Подробнее: http://system.data.sqlite.org/index.html/timeline

затем я решил отказаться от новой версии (V1.0.88) и использовали старую версию (V1.0.66) и все вернулось в норму. Программа снова исполняется на другом компьютере.

Я попытался взглянуть на исходный код В1.0.88, но мне не удалось найти строки кода, которые вызывают проблему. Лучшее, что я могу обнаружить, - это проект система.Данные.Базы данных SQLite.Interop. Когда я загружаю решение в Visual Studio 2010, система.Данные.Базы данных SQLite.Interop предустановлено для сборки для .NET Framework 4.0. Я не знаю как изменить он. Позже я перезагружаю решение в Visual Studio 2008, общие свойства система.Данные.Базы данных SQLite.Interop показывая, что он собирается построить для .NET Framework 2.0 (что я и ищу), но я не могу построить решение. Некоторые ошибки построения. Я не тратил время на отладку.

Мне нужно разработать программу для .NET Framework 2.0, потому что есть пользователи, которые все еще используют Windows XP.

Я предполагаю, что В1.0.88 содержит ошибки, но я могу ошибаться. Во всяком случае, что касается текущего решения, я просто придерживаюсь В1.0.66.


У меня также были проблемы с SQLite с v1.0.66 в машинах x64/x86. Я никогда не мог установить ServiceStack, а затем SqLite.x86 с пакетом nuget и заставить его работать из коробки.

но сегодня я изменил процесс установки с succes, и это может быть решение также для вас. Я подозреваю,что проблема в том, что версия системы.Данные.SQlite не выровнен с одним Servicestack.Ormlite.SqliteNET ожидает.

следующий процесс в консоли Nuget заставляет вещи работать для меня:

Install-Package System.Data.Sqlite.x86 -Version 1.0.88.0
Install-Package ServiceStack -Version 3.9.71
Install-Package ServiceStack.OrmLite.Sqlite32 -Version 3.9.71

в вашем приложении.файл конфигурации, добавьте эти строки внутри <configuration> элемент:
<runtime> <loadFromRemoteSources enabled="true"/> </runtime>


проверьте, работает ли MS Visual C++ с распространяемой установкой, как система.Данные.SQLite зависит от него.