Теперь у меня в руках немного жучка, и я ищу какую-нибудь помощь с ним.
У меня есть служба 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, и, следовательно, исключение.