У меня есть приложение WPF, работающее с VS2010. Net3.5 с использованием Nhibernate с FluentNHibernate + SQLite, и все работает нормально.
Теперь я хочу изменить использование .Net4, но это стало более болезненным опытом, чем я ожидал. При настройке соединения я делаю это:
var cfg = Fluently.Configure().
Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
_sessionFactory = cfg.BuildSessionFactory();
Вызов BuildSessionFactory() вызывает исключение FluentConfigurationException:
При создании SessionFactory использовалась недопустимая или неполная конфигурация. Для получения более подробной информации просмотрите коллекцию PotentialReasons и InnerException.
Внутреннее исключение дает нам дополнительную информацию:
Не удалось создать драйвер из NHibernate.Driver.SQLite20Driver, NHibernate, Version = 2.1.2.4000, Culture = neutral, PublicKeyToken = aa95f207798dfdb4.
И далее InnerException:
Реализация IDbCommand и IDbConnection в сборке System.Data.SQLite не найдена. Убедитесь, что сборка System.Data.SQLite находится в каталоге приложения или в глобальном кэше сборок. Если сборка находится в GAC, используйте элемент в файле конфигурации приложения, чтобы указать полное имя сборки.
Теперь - мне кажется, что он не находит System.Data.SQLite.dll
, но я не могу этого понять. Везде, где это указано, у меня есть "Копировать локальную", и я проверил, что он находится в каждой папке сборки для проектов, использующих SQLite. Я также скопировал его вручную в каждую папку Debug решения - без везения.
Примечания:
- Это точно такой же код, который работал отлично, прежде чем я обновился до .Net4.
- Я видел некоторые проблемы с несоответствием x64 x86 раньше, но я переключился на использование x86 в качестве целевой платформы и для всех ссылочных DLL. Я проверил, что все файлы в папке Debug - x86.
- Я пробовал предварительно скомпилированные библиотеки Fluent, я попытался скомпилировать себя, и я скомпилировал свою собственную версию Fluent с использованием .Net4.
- Я вижу, что есть и другие, которые видели эту проблему, но я пока не видел никакого решения.
После ответа @devio я попытался добавить ссылку на dll SQLite. Это ничего не изменило, но я надеюсь, что я сделал все правильно. Это то, что я добавил в корневой файл node файла app.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Data.SQLite" fullName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</assemblyBinding>
</runtime>
Любой, кто успешно использует Fluent с .Net4 и SQLite? Помогите! Я потерян...