2013-08-12 3 views
11

(Это дублированный вопрос, заданный в stackoverflow.com. Я прочитал ответы. Я пробовал решения, но это не решило мою проблему. Я расскажу, в чем моя проблема и что я сделал).System.IO.FileLoadException: Не удалось загрузить файл или сборку 'System.Data.SQLite

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

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

System.IO.FileLoadException: Could not load file or assembly 'System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' or one of its dependencies. The application has failed to start because its side-by-side
configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.
(Exception from HRESULT: 0x800736B1) File name: 'System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' ---> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side
configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.
(Exception from HRESULT: 0x800736B1) at SimPB.config.PrepareDatabase() at SimPB.config.InitializeProgram() at SimPB.Program.Main()

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

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

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

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

Попытка 2: Убедитесь, что приложение, на который ссылается при правильной сборке System.Data.SQLite, что x86 + .Net Framework 2.0 (SQLite-netFx20-двоично-Win32-2005-1.0.88.0). Совершено

Покушение 3: Попробуйте эти коды на App.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> 

Done.

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

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

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

You must use "Turn Windows Features On or Off" in the Control Panel to install or configure Microsoft .NET Framework 2.0 SP2.

Обновлено: (После прочтения ответов и комментариев)
ПОПЫТКИ 7: Убедитесь System.Data.SQLite.DLL находится в папке выходного лотка. Выполнено

Попытка 8: Двойное подтверждение, что на другом компьютере работает 32-разрядная Windows 7.Совершено

Покушение 9: Измените объявление 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> 

Для этого:

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

Готово для Покушение 9.

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

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

+0

Проверьте это дллы (System.Data.SQLite.DLL) становятся скопированы и присутствуют в вашей папке бен – Rex

+0

@Rex Да. – mjb

+0

Вы абсолютно уверены, что на другом компьютере не работает 64-битный? – SWeko

ответ

5

Я решил проблему. Это, как я могу решить:

Короткий рассказ:
Используйте старую версию System.Data.SQLite. Предполагается, что в новой версии есть ошибки (я мог ошибаться).

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

Да, я изменил версию System.Data.SQLite.

Старая версия System.Data.SQLite, используемая этой программой, - V1.0.66. Новая версия, которую я использовал, - это последняя версия: V1.0.88, выпущенная на 8 августа 2013 г.. (Да, около 4 дня назад с сегодняшнего дня). Подробнее: http://system.data.sqlite.org/index.html/timeline

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

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

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

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

4

Узел не может находиться в связи с заявлением HintPath в your .csproj file:

<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 в этом месте. Однако другой человек может захотеть использовать файл System.Data.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> 

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

+1

+1 реквизит для фактического dl'ing его кода. – Mithon

+0

Привет, я попробовал ваше предложение. но проблема все еще остается. Однако я решил проблему. Я сам ответил на этот вопрос. Спасибо вам за вашу помощь :) удачи – mjb

1

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

Но сегодня я сменил процесс установки на успешные, и это может быть и решение для вас. Я подозреваю, что проблема в том, что версия System.Data.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 
0

Проверьте MS Visual C++ работает распространяемые установки, так как System.Data.SQLite это зависит от него.

1

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