Не удалось найти запрашиваемый поставщик данных.Net Framework. Он не может быть установлен
Привет, это мой первый раз, когда я публикую проект, девелопрованный с инфраструктурой сущностей на удаленном сервере. Страницы работают нормально, но когда я пытаюсь получить доступ в своей зарезервированной области, и поэтому, читая dabatase, я получаю эту ошибку
Не удалось найти запрашиваемый поставщик данных.Net Framework. Он не может быть установлен.
Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.
Сведения об исключении: System.ArgumentException: невозможно найти запрошенный поставщик данных.Net Framework. Он не может быть установлен.
Ошибка источника:
Необработанное исключение было создано во время выполнения текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием следа стека исключений ниже.
Трассировки стека:
[ArgumentException: невозможно найти запрашиваемый поставщик данных.Net Framework. Он не может быть установлен.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1402071
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35
[ArgumentException: указанный поставщик магазина не может быть найден в конфигурации или недействителен.]
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +62
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) +263
System.Data.EntityClient.EntityConnection..ctor(String connectionString) +81
System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) +42
System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) +16
shield_trust.db_shieldtrustEntities..ctor() в D:\trust-company\shield_trust\shield_trust\POCO.Context.cs: 23
shield_trust.user_login.check_login() в D:\trust-company\shield_trust\shield_trust\user_login.aspx.cs: 65
shield_trust.user_login.entraButton_Click (отправитель объекта, EventArgs e) в D:\trust-company\shield_trust\shield_trust\user_login.aspx.cs: 25
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
Мне нужно скопировать некоторую dll в мою папку bin или изменить мой web.config?
Ответы
Ответ 1
Попробуйте запустить это, чтобы получить список установленных поставщиков, и проверьте, есть ли у вас:
// This example assumes a reference to System.Data.Common.
static DataTable GetProviderFactoryClasses()
{
// Retrieve the installed providers and factories.
DataTable table = DbProviderFactories.GetFactoryClasses();
// Display each row and column value.
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
return table;
}
ОБНОВЛЕНИЕ: вам нужно, чтобы поставщик MySQL был установлен на целевой машине, он называл нечто вроде "MySQL Connector Net xxx", который вы можете получить с этого веб-сайта
Ответ 2
С нашими приложениями (ASP.NET, Test, Windows Service) нам пришлось добавить ниже в наши файлы app.config или web.config (внутри узла configuration
), чтобы сделать эту работу:
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Ответ 3
Для нас это был 32 против 64-битного процесса. Сервер 64 бит. Установленный ODP.NET(Oracle Client) также является 64-битным. Наше приложение составлено с целевой платформой "Любой процессор" и "Предпочитаем 32-разрядный" флаг SET:
http://grab.by/v5ki
работал как 32-битный процесс. После перекомпиляции с флагом, который не был проверен, все начало работать.
Ответ 4
Если вы получите диалог следующим образом...
"Не удается найти запрашиваемый поставщик данных.NET Framework. Возможно, он не установлен"
Просмотрите файлы machine.config в следующих местах...
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
Удалите все пустое
"DbProviderFactories" nodes.
Ответ 5
При подключении к базе данных для абстракции реализаций используется так называемый "поставщик данных".
Ваше исключение, похоже, говорит о том, что данный датапарайдер отсутствует на целевой машине. Какую базу данных вы используете в развернутой среде? Проверьте свою спецификацию web.config connectionstring.
Возможно, вам придется установить данный датапараудер самостоятельно на этом компьютере (один раз), чтобы он был доступен из глобального сборочного кэша (GAC).
Ответ 6
Смутно, я потратил три дня, пытаясь решить эту ошибку. У меня было неправильное свойство "providerName" на моем "connectionString"
Изменено:
<configuration>
<connectionStrings>
<add name="Old" connectionString="Server=servername;Database=databasename;Uid=userid;Pwd=password;" providerName="System.Data.MySqlClient" />
</connectionStrings>
</configuration>
чтобы:
<configuration>
<connectionStrings>
<add name="Old" connectionString="Server=servername;Database=databasename;Uid=userid;Pwd=password;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
Я указал System.Data.MySqlClient
вместо Mysql.Data.MySqlClient
d'ах!
Ответ 7
Я знаю, что это устарело, но, как объяснил udog, этот раздел сообщения об ошибке "Указанный поставщик магазина не может быть найден в конфигурации или недействителен" указывает на то, что проблема. Таким образом, в зависимости от базы данных базы данных добавьте информацию о поставщике в файл конфигурации. Если уже добавлено, убедитесь, что оно правильно. Для oracle, если вы используете управляемый поставщик для EF и oracle.DataAccess, он будет выглядеть примерно так. Обратите внимание, что версия oracle dll может отличаться.
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.MaanagedDataAccess.Client"/>
<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="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.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data>
Ответ 8
Чтобы построить дальнейший ответ udog, если у вас будет несколько приложений на сервере с использованием этого поставщика данных, то, вероятно, имеет смысл добавить его в файл machine.config.
Как отмечает Томас, файлы machine.config находятся здесь:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
Запись machine.config похожа на запись web.config:
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Примечание. Если у вас есть приложение на нескольких серверах (например, QA/тестовый сервер и производственный сервер), и вы получаете эту ошибку только на одном из них, я бы рекомендовал делать файл, отличный от файлов machine.config, чтобы увидеть, это разница между серверами.