У меня есть приложение WPF, работающее с использованием VS2010.Net3.5 Nhibernate с FluentNHibernate + SQLite, и все хорошо работает.
Теперь я хочу измениться на использование.Net4, но это превратилось в более болезненный опыт затем, я ожидал.. При установке соединения я делаю это:
var cfg = Fluently.Configure().
Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")).
Mappings(m => m.FluentMappings.AddFromAssemblyOf());
_sessionFactory = cfg.BuildSessionFactory();
BuildSessionFactory () вызов бросает высказывание FluentConfigurationException:
Недопустимая или неполная конфигурация использовалась при создании SessionFactory. Проверьте набор PotentialReasons и InnerException для получения дополнительной информации.
Внутреннее исключение дает нам больше информации:
Не удалось создать драйвер из NHibernate. Драйвер. SQLite20Driver, NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
И дальнейший InnerException:
Реализация IDbCommand и IDbConnection в системе сборки. Данные. SQLite не мог быть найден. Удостоверьтесь что система сборки. Данные. SQLite расположен в каталоге приложения или в Глобальном кэше сборок. Если блок находится в GAC, используйте элемент в файле конфигурации приложения для определения полного имени блока.
Теперь - мне это кажется, что не находит System.Data.SQLite.dll
, но я не могу понять это. Везде на это ссылаются, у меня есть "Копия, Локальная", и я проверил, что это находится в каждой папке сборки для проектов с помощью SQLite. Я также скопировал его вручную в каждую Папку отладки решения - без удачи.
Примечания:
После ответа @devio я пытался добавить ссылку на SQLite dll. Это ничего не изменило, но я надеюсь, что сделал это правом хотя.. Это - то, что я добавил к корневому узлу app.config файла:
Кто-либо туда использование Быстрого с.Net4 и SQLite успешно?На помощь!Я заблудился...
Проверьте версию ссылки на System.Data. Мне кажется, что System.Data.SqlLite не может найти версию IDbCommand и IDbConnection, с которой он был построен, и, как я подозреваю, это версия 2.0.0.0. Я подозреваю, что теперь вы обновились до .Net 4, вы ссылаетесь на System.Data версии 4.0.0.0.
Если это так, вы должны иметь возможность добавить перенаправление привязки для решения проблемы:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089"/>
<bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
У меня была аналогичная проблема с NH, VS2010, .Net4, но с драйверами Oracle ODP.Net и 32-битными.
Решением было объявить «квалифицированную сборку» в файле web.config с явным номером версии. См. Мою сводку .
Возможно, это решение применимо и к вашей проблеме.
Я также получал такое же сообщение об ошибке, когда пробовал Fluent с .Net4 и SQLite, но когда я присмотрелся, нашел другое сообщение об ошибке.
Не удалось загрузить тип System.Data.SQLite.SQLiteConnection, System.Data.SQLite. System.IO.FileLoadException: сборка смешанного режима создана для версии v2.0.50727 среды выполнения и не может быть загружается во время выполнения 4.0 без дополнительной информации о конфигурации.
Я добавил useLegacyV2RuntimeActivationPolicy = "true" в тег "startup" следующим образом.
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
Мне не нужно добавлять зависимую сборку или что-то еще внутри тега runtime. Согласно тексту ссылки и тексту ссылки , его следует использовать только для помощи в миграции. Надеюсь, SQLite скоро будет обновлен.
Надеюсь, это поможет! Карлким
Мне удалось решить эту проблему, изменив целевую платформу на x86 в настройках отладки проекта. Я использую vs2010.