Вопрос:
Im, использующий Visual Studio 2010 Ultimate, Project – С# MVC3 Razor
У меня есть проект, который работает без каких-либо проблем на локальной машине, используя базу данных MySql (из онлайн-сервера) просто отлично, но когда я ее загружаю и когда она попадает в ту часть, где нужно получать данные с сервера MySql, она дает мне эта ошибка:
Не удалось найти запрошенный поставщик данных .Net Framework. Это может не быть установленным.
Это моя строка подключения из Web.config для MySql, так как это нормально работает, когда я отлаживаю проект локально. Читает информацию из таблиц и показывает на странице.
<add name=»istakipDBContext» connectionString=»Server=xxx.xxx.xxx.xxx; Database=xxx; Uid=xxx; Pwd=xxx;» providerName=»MySql.Data.MySqlClient» />
И это целая трассировка стека:
Ошибка сервера в приложении “/”. Не удалось найти запрошенную .Net Поставщик данных каркаса. Он не может быть установлен. Описание: необработанное исключение произошло во время выполнения текущей сети запрос. Просмотрите трассировку стека для получения дополнительной информации о и где он возник в коде.
Сведения об исключении: System.ArgumentException: невозможно найти запрошенный поставщик данных .Net Framework. Он не может быть установлен.
Ошибка источника:
Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.
Трассировка стека:
[ArgumentException: невозможно найти запрошенные данные .Net Framework Provider. Он не может быть установлен.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1420503
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String имя) +393
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +47
System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel() +9 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +262 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Тип entityType) +17
System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +63
System.Data.Entity.Internal.Linq.InternalSet 1.GetEnumerator() +15
System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
+40 System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable 1 источник) +58 onlinetercume.Controllers.istakiplerController.Index() в C:WwwrootнпснпсКонтроллерыistakiplerController.cs: 21 lambda_method (Closure, ControllerBase, Object []) +62
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase контроллер, объект []) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 параметры) +27
System.Web.Mvc <. > C_DisplayClass15.b_12() +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter фильтр, ActionExecutingContext preContext, Func 1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
+19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, IList 1 фильтр, ActionDescriptor actionDescriptor, IDictionary 2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext
controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
+97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext
requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8 1.b__7 (IAsyncResult ) +12 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc. < > c_DisplayClasse.b_d() +50
System.Web.Mvc.SecurityUtil.b_0 (Действие f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(действие действия) +22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult результат) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970061 System.Web.HttpApplication.ExecuteStep(шаг IExecutionStep, Boolean и завершено синхронно) +184Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.272
Лучший ответ:
Поставщик должен быть зарегистрирован в одном из файлов иерархической конфигурации. Например, у меня есть провайдер oracle, зарегистрированный в файле machine.config(который, кажется, выполняется автоматически, когда я установил odac с установщиком установки).
Мой machine.config выглядит следующим образом:
<system.data> <DbProviderFactories> <add name=»Oracle Data Provider for .NET» invariant=»Oracle.DataAccess.Client» description=»Oracle Data Provider for .NET» type=»Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342″ /> <add name=»ODP.NET, Managed Driver» invariant=»Oracle.ManagedDataAccess.Client» description=»Oracle Data Provider for .NET, Managed Driver» type=»Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342″ /> <add name=»Microsoft SQL Server Compact Data Provider 4.0″ invariant=»System.Data.SqlServerCe.4.0″ description=».NET Framework Data Provider for Microsoft SQL Server Compact» type=»System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ /> </DbProviderFactories>
Будьте осторожны, потому что в приложениях Asp.Net есть еще один файл cofig в иерархии, называемый aslo web.config. Он находится в той же папке, что и machine.config. В этой ссылке объясняется иерархия конфигурации Asp.Net: msdn
Если поставщик не зарегистрирован в одном из этих файлов, генерируется сообщение об ошибке. В этом случае я считаю, что лучший способ решить эту проблему – добавить конфигурацию прямо в файл asp.net aplication web.config. что-то вроде этого:
<system.data> <DbProviderFactories> <remove invariant=»Oracle.DataAccess.Client» /> <add name=»Oracle Data Provider for .NET» invariant=»Oracle.DataAccess.Client» description=»Oracle Data Provider for .NET» type=»Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342″ /> </DbProviderFactories> Ответ №1
Ошибка ясна, он не может найти поставщика данных MySQL
Если вы развернули на ваш производственный сервер, возможно, вы не развернули компонент MySQL, убедитесь, что вы развернули dll MySQL в папку bin вашего приложения.
Общей проблемой является наличие компонента, установленного в GAC, в изолированной среде разработки, и они отсутствуют на рабочем сервере, проверьте, находится ли dll в GAC:
Глобальный кэш сборок (GAC) расположен в: %windir%assembly
Вы можете заставить ссылки из вашего проекта быть развернуты на производственный сервер, выбрав свойство copy always для сборки в true, однако, если оно настроено на разрешение ссылки из GAC, тогда лучше установить компонент в GAC в производственной коробке:
Это шаги для установки поставщика данных MySQL в GAC
Как резюме:
-
Решение 1:
Запустите следующую команду для регистрации поставщика данных MySQL в GAC (таким образом, версия вашего поставщика данных MySQL будет установлена глобально для всех приложений на сервере)
“C:Program Files (x86)Microsoft SDKWindowsv7.0ABingacutil.exe” /i MySql.Data.dll
-
Решение 2:
Скопируйте dll MySql.Data.dll в каталог bin вашего приложения
Ответ №2
Для этой конкретной ошибки в Microsoft Visual Studio Professional 2012 просто проверьте имя Provider:
<providerName=»System.Data.SqlClient»/>