我正在尝试使用Enterprise Library 5.0并在我的BL上进行一些单元测试,我是否需要在DL或Test项目上安装app.config?
注意:我的web项目上的web.config上已经有配置设置。
我如何使用DAAB:
private static Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery("spInsertSalesman", salesman.Fullname);
我在DL上的app.config:
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</configSections>
<dataConfiguration defaultDatabase="DBTEST" />
<connectionStrings>
<add name="DBTEST" connectionString="Data Source=[dbsource];Initial Catalog=[dbname];User Id=sa;Password=password;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
答案 0 :(得分:3)
添加其他原因。
我有一个引用Enterprise Library 5.0.xxxxx的VS2010解决方案/ csproj。
但是,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(或更高版本)下运行。
编辑:
由于没有定义正确的“DbProviderFactories”,我也遇到了这个错误。 我发布了一个我在此URL找到的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>
最后:
我收到此错误后,因为我没有与defaultDatabase值同名的ConnectionString(在配置文件中)。阿卡,简单的“麻木头骨”错误。
如果您愿意,可以将此安全阀代码放入(在您创建数据库之前)。
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));
}
}
}
答案 1 :(得分:1)
这是由于GAC dll(程序集中的Dll)与应用程序引用的dll之间的dll不匹配所致。
从程序集中删除dll并尝试运行。
希望它能解决你的问题。
答案 2 :(得分:0)
我引用了错误的.dll副本。它现在有效。
答案 3 :(得分:0)
由于类库可以有app.config文件。当你使用EntLib 5.0&amp;想要访问类libarry中的连接字符串。因此,您需要将上面的配置添加到解决方案中使用的所有web.config文件中。例如,如果您有UI层,则Business(类库)和UI层之间的WCF层和Business层位于WCF服务和DAL(类库)之间。
在这里,每个UI层都有一个web.config文件。 WCF服务层,所以这两个web.config文件应该包含上面提到的设置。
答案 4 :(得分:0)
我有同样的问题,我通过将EntLib从5.0改为3.1来解决它
答案 5 :(得分:0)
确保您的服务器安装了MySQL .net连接器。在安装连接器之前,我遇到了同样的错误。 http://www.mysql.com/products/connector/
答案 6 :(得分:-2)
我能够通过在CreateDatabase调用中显式指定连接字符串的名称来修复DLL项目中的此错误,如下所示:
Database db = DatabaseFactory.CreateDatabase("DBTEST");
而不是
Database db = DatabaseFactory.CreateDatabase();