2015-11-02 6 views
0
.

. Обновлен до последней версии NHibernate. Теперь некоторые из моих модульных тестов терпят неудачу, когда я использую библиотеку SQLite InMemory. Вот что я модернизировалSystem.Data.SQLite.SQLiteException: процедура обратного вызова запросила прерывание. Выполнение было прервано пользователем.

  • FluentNHibernate 1.2.0.712 ==> 2.0.3
  • NHibernate 3.1.0.4000 ==> 4.0.4.4000
  • Iesi.Collections 3.1.0.4000 ==> 4.0.1.4000

Теперь следующий код компилируется, но не работает корректно.

var cfg = Fluently.Configure() 
        .Database(SQLiteConfiguration.Standard.InMemory().ShowSql()) 
        .BuildConfiguration(); 
cfg.BuildSessionFactory(); 

Я получаю следующую ошибку каждый раз.

SetUp: System.Data.SQLite.SQLiteException: Callback процедура запросила прерывание выполнение было прервано пользователем

Кто-нибудь еще сталкивался с этим во время обновления и нашел способ вокруг него? Моя временная шкала довольно жесткая, поэтому любая помощь будет оценена по достоинству.

ответ

0

После получения ответа от другого разработчика по проблеме они спросили меня, какую версию DLL System.Data.SQLite я использую. Оказывается, я использовал версию 1.0.60.0. Эта ссылка оказалась жестко закодированной для загруженной копии DLL. Я удалил ссылку из проекта, а затем добавил пакет NuGet который установленную версию 1.0.98.1

<package id="System.Data.SQLite.Core" version="1.0.98.1" targetFramework="net45" /> 

После установки этого пакета, а затем перекомпилировать, модульные тесты побежали отлично от Visual Studio, но не с помощью команды MSBuild.exe линия. Это было необходимо для сервера непрерывной сборки. Это не было, пока я не изменить режим ссылочный от значения по умолчанию CopyLocal = False к CopyLocal = True

System.Data.SQLite Copy Local Action

Это создает вложенные папки x86 и x64, которые содержат «SQLite.Interop.Dll «это необходимо при выполнении перестройки. Это позволило модульным испытаниям корректно работать на моей машине. Для сервера постоянной интеграции (CI) мне нужно было добавить встроенный шаг, который скопировал бы эти две папки в выходную папку.

<PreBuildEvent>xcopy $(SolutionDir)\packages\System.Data.SQLite.Core.1.0.98.1\build\net45\* $(TargetDir) /S /V /Y</PreBuildEvent> 

Это позволило CI-серверу скопировать файлы в выходную папку для модульного тестирования.

Хотя я чувствую, что глупый не обновлял System.Data.SQLite.DLL, когда обновлял остальное решение NHibernate, надеюсь, этот вопрос не позволит кому-то другому совершить ту же ошибку.

Смежные вопросы