Я пытался преобразовать свое приложение (которое использует EF) из System.Data.SqlClient в Microsoft.Data.SqlClient для поддержки распределенных транзакций, и я столкнулся с проблемой, в частности ошибка зависимости.
Мы работаем над веб-приложением .NET 7 (скоро обновимся до 8), которое довольно сложное, поэтому мы фактически накладываем эту библиотеку поверх нашей DBContexts для отслеживания изменений. Поскольку это приложение также было создано на основе System.Data.SqlClient, я проверил исходный код и изменил зависимости, чтобы использовать Microsoft.Data.SqlClient, а также сделал то же самое в нашем основном приложение. Я также следовал инструкциям Microsoft по использованию новой библиотеки в качестве поставщика. Однако при попытке запустить приложение я получаю следующую ошибку:
Autofac.Core.DependencyResolutionException: An exception was thrown while activating MyApplication.Services.Implementations.UserService -> MyApplication.DAL.DataAccessors.MainContext.
---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(MyApplication.ClaimsProvider.IClaimsProvider)' on type 'MainContext'.
---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.SqlClient, Version=4.6.1.6, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.
File name: 'System.Data.SqlClient, Version=4.6.1.6, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
at System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetService(Type type, Object key, Func`3 handleFailedLookup)
at System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetServices(Type type, Object key)
at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.c__DisplayClass5_0.b__0(Tuple`2 k)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.GetServices(Type type, Object key)
at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.c__DisplayClass6_0.b__0(IDbDependencyResolver r)
at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
at System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Data.Entity.Infrastructure.DependencyResolution.InternalConfiguration.Lock()
at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.b__10_0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
--- End of stack trace from previous location ---
at System.Lazy`1.CreateValue()
at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.GetConfiguration()
at System.Data.Entity.Infrastructure.DependencyResolution.InternalConfiguration.get_Instance()
at System.Data.Entity.DbConfiguration.get_DependencyResolver()
at System.Data.Entity.DbContext.InitializeLazyInternalContext(IInternalConnection internalConnection, DbCompiledModel model)
at System.Data.Entity.DbContext..ctor(String nameOrConnectionString)
at TrackerEnabledDbContext.TrackerContext..ctor(String nameOrConnectionString) in F:\Dev\TrackerEnabledDBContext\TrackerEnabledDbContext\TrackerContext.cs:line 74
at MyApplication.DAL.DataAccessors.MainContext..ctor(IClaimsProvider claimsProvider) in F:\Dev\MyApp\src\Data\MyApplication.DAL\DataAccessors\MainContext.cs:line 79
at lambda_method73(Closure, Object[])
at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
--- End of inner exception stack trace ---
at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
at Autofac.Core.Activators.Reflection.ReflectionActivator.b__11_0(ResolveRequestContext ctxt, Action`1 next)
at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
--- End of inner exception stack trace ---
at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable`1 parameters)
at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
at lambda_method627(Closure, IServiceProvider, Object[])
at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.c__DisplayClass6_0.g__CreateController|0(ControllerContext controllerContext)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
Поставщики, которые я заменил в файлах app.config и appsettings.json:
И, конечно же, я установил пакеты nuGet Microsoft.Data.SqlClient и Microsoft.EntityFramework.SqlServer как в приложении, так и в библиотеке.
Я решил, что после полного удаления System.Data.SqlClient из приложения и замены поставщиков все будет работать, но он явно ищет этот файл. Я, наверное, мог бы просто поместить этот файл куда-нибудь в папку bin, но боюсь, что он ищет этот файл, потому что он будет использовать его для выполнения всех операций SQL, а это именно то, чего я не хочу.
РЕДАКТИРОВАТЬ: я пропустил пакет System.Data.SqlClient в одном из моих проектов. Удаление решило проблему.
Я пытался преобразовать свое приложение (которое использует EF) из System.Data.SqlClient в Microsoft.Data.SqlClient для поддержки распределенных транзакций, и я столкнулся с проблемой, в частности ошибка зависимости. Мы работаем над веб-приложением .NET 7 (скоро обновимся до 8), которое довольно сложное, поэтому мы фактически накладываем эту библиотеку поверх нашей DBContexts для отслеживания изменений. Поскольку это приложение также было создано на основе System.Data.SqlClient, я проверил исходный код и изменил зависимости, чтобы использовать Microsoft.Data.SqlClient, а также сделал то же самое в нашем основном приложение. Я также следовал инструкциям Microsoft по использованию новой библиотеки в качестве поставщика. Однако при попытке запустить приложение я получаю следующую ошибку: [code]Autofac.Core.DependencyResolutionException: An exception was thrown while activating MyApplication.Services.Implementations.UserService -> MyApplication.DAL.DataAccessors.MainContext. ---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(MyApplication.ClaimsProvider.IClaimsProvider)' on type 'MainContext'. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.SqlClient, Version=4.6.1.6, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. File name: 'System.Data.SqlClient, Version=4.6.1.6, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' at System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetService(Type type, Object key, Func`3 handleFailedLookup) at System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetServices(Type type, Object key) at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.c__DisplayClass5_0.b__0(Tuple`2 k) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.GetServices(Type type, Object key) at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.c__DisplayClass6_0.b__0(IDbDependencyResolver r) at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext() at System.Linq.Enumerable.ConcatIterator`1.MoveNext() at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext() at System.Linq.Enumerable.ConcatIterator`1.MoveNext() at System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at System.Data.Entity.Infrastructure.DependencyResolution.InternalConfiguration.Lock() at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.b__10_0() at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode) --- End of stack trace from previous location --- at System.Lazy`1.CreateValue() at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.GetConfiguration() at System.Data.Entity.Infrastructure.DependencyResolution.InternalConfiguration.get_Instance() at System.Data.Entity.DbConfiguration.get_DependencyResolver() at System.Data.Entity.DbContext.InitializeLazyInternalContext(IInternalConnection internalConnection, DbCompiledModel model) at System.Data.Entity.DbContext..ctor(String nameOrConnectionString) at TrackerEnabledDbContext.TrackerContext..ctor(String nameOrConnectionString) in F:\Dev\TrackerEnabledDBContext\TrackerEnabledDbContext\TrackerContext.cs:line 74 at MyApplication.DAL.DataAccessors.MainContext..ctor(IClaimsProvider claimsProvider) in F:\Dev\MyApp\src\Data\MyApplication.DAL\DataAccessors\MainContext.cs:line 79 at lambda_method73(Closure, Object[]) at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate() --- End of inner exception stack trace --- at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate() at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters) at Autofac.Core.Activators.Reflection.ReflectionActivator.b__11_0(ResolveRequestContext ctxt, Action`1 next) at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next) --- End of inner exception stack trace --- at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request) at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request) at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance) at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable`1 parameters) at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired) at lambda_method627(Closure, IServiceProvider, Object[]) at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.c__DisplayClass6_0.g__CreateController|0(ControllerContext controllerContext) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext context) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application) [/code] Поставщики, которые я заменил в файлах app.config и appsettings.json: [code]configSections>
[/code] И, конечно же, я установил пакеты nuGet Microsoft.Data.SqlClient и Microsoft.EntityFramework.SqlServer как в приложении, так и в библиотеке. Я решил, что после полного удаления System.Data.SqlClient из приложения и замены поставщиков все будет работать, но он явно ищет этот файл. Я, наверное, мог бы просто поместить этот файл куда-нибудь в папку bin, но боюсь, что он ищет этот файл, потому что он будет использовать его для выполнения всех операций SQL, а это именно то, чего я не хочу. РЕДАКТИРОВАТЬ: я пропустил пакет System.Data.SqlClient в одном из моих проектов. Удаление решило проблему.
Используя Visual Studio 2022 и .net 8.0, у меня есть проект данных в моем решении, где я удалил все очевидные ссылки на System.data.sqlclient и ссылался на microsoft.data.sqlclient , но инструмент, генерирующий код, продолжает создавать код....
Я пытаюсь перенести древнее приложение в гораздо более новую версию .net и сталкиваться с чем -то странным; Асинхронные запросы больше не работают в своей библиотеке SQL (в основном, это обертка вокруг sqlClient ):
Я пытаюсь перенести древнее приложение в гораздо более новую версию .net и сталкиваться с чем -то странным; Асинхронные запросы больше не работают в своей библиотеке SQL (в основном, это обертка вокруг sqlClient ):
У меня есть веб -API .net 8, который использует частный пакет Nuget, созданный на .net 8, который мы используем для удержания общей логики для доступа к нашей базе данных. В настоящее время мы используем Dapper и System.Data.sqlClient для доступа к...
У меня есть веб -API ASP.net Core 8, который использует частный пакет Nuget, созданный на .net 8, который мы используем для удержания общей логики для нашей базы данных. В настоящее время мы используем Dapper и System.Data.sqlClient для доступа к...