[A] System.Data.SQLite.SQLiteConnection не может быть приведен к [B] System.Data.SQLite.SQLiteConnection - PullRequest
1 голос
/ 13 июня 2011

Теперь у меня в руках немного жучка, и я ищу какую-нибудь помощь с ним.

У меня есть служба Windows, которая использует System.data.sqlite.В редких случаях (очевидно, только в Windows Vista , но это может быть красная сельдь), возникает исключение: [A]System.Data.SQLite.SQLiteConnection cannot be cast to [B]System.Data.SQLite.SQLiteConnection...

К сожалению, мы не смогли повторить эту ошибкуздесь, в офисе, и имеют ограниченный доступ к машинам, где это происходит.Я пытался связываться с GAC (регистрация и отмена регистрации сборок разных версий и провидения с использованием gacutil), и приложение, кажется, хорошо работает на моей машине для разработки.

Есть идеи, как я могу попытаться воспроизвести это или какие ситуации могут вызвать это?Вы сталкивались с такими ошибками, которые возникают только в Windows Vista?

Вот самая полная трассировка стека, которую я имею:

[A]System.Data.SQLite.SQLiteConnection cannot be cast to [B]System.Data.SQLite.SQLiteConnection.  
Type A originates from 'System.Data.SQLite, Version=1.0.66.0.  Culture=neutral, PublicKey Token=db937bc2d44ff139' 
in the context 'Default' at location 'C:\Program Files\ultracorp\System.... [yes, ellipses are the best I have right here, I know...]


Server stack trace: 
   at System.Data.SQLite.SQLiteCommand.set_DbConnection(DbConnection value)
   at System.Data.Common.DbCommand.set_Connection(DbConnection value)
   at System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand entityCommand, EntityTransaction entityTransaction, DbCommand storeProviderCommand)
   at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
   at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
   at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
   at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
   at UltraCorp.DataWrangler.Models.WidgetsTable.getWidget(WidgetsEntities dbConn)
   at UltraCorp.DataWrangler.Models.WidgetsTable.getWidget()
   at UltraCorp.DataWrangler.Models.WidgetsTable.getUser()
   at UltraCorp.DataWrangler.Infrastructure.DataWranglerTray.getUser()
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Редактировать : Вмой app.config, у меня есть provider=System.Data.SQLite; в нескольких местах.Обратите внимание, что нет строгого имени или номера версии.Я подозреваю, что может случиться так, что в некоторых случаях загружается DLL, содержащая модели данных, и когда Entity Framework видит, что запрашивается этот поставщик, он выбирает System.Data.Sqlite для использования.Затем, когда происходит какой-либо код, DLL-библиотека , отличная от , загружается в соответствии с правилами ссылок.Однако эта DLL имеет версию или строгое имя, отличное от загруженной EF, и, следовательно, исключение.

Ответы [ 2 ]

2 голосов
/ 27 января 2016

Я также получил эту ошибку при попытке создать ADO.NET Entity Data Model.

Мое решение загружало компоненты типа проекта для Visual Studio 2013.
Моя загрузка была найдена 'sqlite-netFx451-setup-bundle-x86-2013-1.0.99.0.exe':

https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Мои пакеты Nuget для SQLite не соответствуют компонентам моего дизайнера.

1 голос
/ 18 июля 2011

Я нашел два других сообщения от пользователей, которые столкнулись с такой же проблемой:
http://sqlite.phxsoftware.com/forums/t/2554.aspx
а тут
http://forums.sabnzbd.org/viewtopic.php?f=6&t=3097&start=150

Используете ли вы GAC для развертывания сборок SQLite?
Вы также развертываете System.Data.Sqlite.Linq.dll?
Вы можете попытаться развернуть зависимости SQLite в папке bin и использовать ссылки на сборки строгих имен в файле конфигурации, чтобы избежать этой проблемы, например.

Я думаю, что это может быть воспроизведено при наличии конфликтующих версий System.Data.Sqlite.dll и \ или System.Data.Sqlite.Linq.dll в той же системе, но со встроенной сборкой .net Framework resolver в любом случае попытается загрузить одну из несовместимых версий, поскольку на зависимости не указана информация о версии и \ или токене открытого ключа.

В целях отладки \ ведения журнала вы можете подключиться к событиям AssemblyLoad и \ или AssemblyResolve AppDomain:
http://msdn.microsoft.com/en-us/library/1dw188c1.aspx

В качестве обходного пути для решения проблемы без повторной компиляции скопируйте отсутствующие зависимости в папку bin и соответственно обновите файл конфигурации.

Редактировать
Также смотрите эти сообщения для получения дополнительной информации и проверенного решения:
http://sqlite.phxsoftware.com/forums/p/2021/8867.aspx
http://sqlite.phxsoftware.com/forums/p/2333/9615.aspx

...