Добавить к другим причинам.
У меня было решение VS2010 / csproj, которое ссылалось на Enterprise Library 5.0.xxxxx.
Однако csproj был установлен на «Target 3.5 Framework». Таким образом, мне нужно было либо ориентироваться на платформу 4.0, либо перейти на версию 3.5 библиотеки предприятия.
Мне удалось обновить целевую платформу до 4.0, а затем ошибки исчезли.
Вот что вы можете сделать, чтобы выяснить, для какой версии фреймворка был скомпилирован код:
(Мини-сценарий Powershell)
[System.Reflection.Assembly]::LoadFrom("c:\somefolder\Any_Of_The_Practices.dll").ImageRuntimeVersion
Если вы получите v2.0.50727, у вас возникнут проблемы при работе в Framework 4.0 (или выше).
EDIT:
Я также получил эту ошибку из-за отсутствия правильного определения «DbProviderFactories».
Я публикую конфигурацию MySql, найденную по этому адресу:
(Я копирую его на случай, если URL-адрес умрет в будущем)
(с http://searchcode.com/codesearch/view/14385662)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/>
</configSections>
<system.data>
<DbProviderFactories>
<add name="EntLibContrib.Data.MySql"
invariant="EntLibContrib.Data.MySql"
description="EntLibContrib Data MySql Provider"
type="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" />
</DbProviderFactories>
</system.data>
<dataConfiguration defaultDatabase="Default Connection String">
<providerMappings>
<add databaseType="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null"
name="EntLibContrib.Data.MySql"/>
</providerMappings>
</dataConfiguration>
<connectionStrings>
<add name="Default Connection String"
connectionString="database=northwind;uid=root;pwd=admin"
providerName="EntLibContrib.Data.MySql"/>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
И наконец:
Однажды я получил эту ошибку, потому что у меня не было ConnectionString (в файле конфигурации) с тем же именем, что и значение defaultDatabase. Ака, простая ошибка "онемение черепа".
Вы можете ввести этот код предохранительного клапана (непосредственно перед созданием базы данных), если хотите.
DatabaseSettings dataConfig = (DatabaseSettings)ConfigurationManager.GetSection("dataConfiguration");
string configDefaultDatabase = string.Empty;
if (null != dataConfig)
{
configDefaultDatabase = dataConfig.DefaultDatabase;
if (!String.IsNullOrEmpty(configDefaultDatabase))
{
ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;
if (null == connections[configDefaultDatabase])
{
throw new ArgumentOutOfRangeException(
string.Format(
"Your dataConfiguration (DefaultDatabase) does not match any of your connection strings. DefaultDatabase='{0}'.",
configDefaultDatabase));
}
}
}