尝试配置企业库5.0(数据访问应用程序块)时出现问题。

13

我在尝试运行Enterprise library 5.0的DAAB时遇到了一些问题。按照教程的步骤,我已经下载/安装了企业库,但是仍然遇到错误...

1)下载/安装企业库

2)添加所需块(common / data)的引用

3)导入

Imports Microsoft.Practices.EnterpriseLibrary.Common
Imports Microsoft.Practices.EnterpriseLibrary.Data

4) 通过企业库配置软件。我打开我的网站的web.config,然后点击Blocks,接着是Add data settings...填写我的详细信息并保存/关闭。

5) 接着(认为设置完成),我尝试通过以下方式获取数据库实例:

 Dim db As Database = DatabaseFactory.CreateDatabase() 

6) 我编译时收到以下错误:

无法加载文件或程序集"Microsoft.Practices.EnterpriseLibrary.Data,Version=5.0.414.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"或该程序集的某个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040) (C:\site\web.config 第4行)

我的 web.config 的第四行是由配置工具生成的:

<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />

我是否错过了必要的步骤?我是否按错误的顺序执行了步骤?我犯了错误吗?

非常感谢您的帮助。

6个回答

20
答案:
我不小心引用了src代码文件夹中的程序集。这意味着公共标记(public tokens)可能为null。我重新引用了C:\Program Files\Microsoft Enterprise Library 5.0\Bin中的程序集,问题现已解决。

这对我起作用了,尽管在 DLL 生效之前,我不得不清理并重新构建我的解决方案。 - Tom Robinson

4
我已经看到你得到了答案; 但是,我想指出,当你从VS打开Config工具时,你可以选择告诉Config工具你希望引用哪些程序集:
  1. 在VS2010中: 打开属性编辑器窗口,并从解决方案资源管理器中选择解决方案文件。
  2. 您将看到“Enterprise Library 5 Assembly Set”选项,可以选择使用签名版本(Microsoft Signed)或未签名版本(EntLibV5Src)
当你启动config工具时,它会根据你的选择在config文件中引用程序集。

1
这对我有用。另外需要注意的一点是:如果您的配置文件已经包含了一些特定于EntLib的内容,并且这些内容被引用为已签名的,而您想要使用未签名版本的EntLib库,则需要手动从配置文件中删除在EntLib上下文中使用的PublicKeyToken=。否则,ConfigEditor将无法打开,您将收到相同的异常。 - juhan_h

3
除了 @Nicolas 给出的答案,您可以通过在使用 Enterprise Library 5.0 dll 的地方删除 app.config 中的公共令牌来解决此问题。

2

企业库有两个下载版本...

  • 企业库5.0-源代码.msi
  • 企业库5.0.msi

只有第二个版本含有已签名的二进制文件...这是解决“清单定义与程序集引用不匹配”错误所必需的

(还有需要注意的是,如果您选择安装第二个版本,它也会包括源代码)


还有一个企业库5.0可选更新1。它的版本号是5.0.505.0,如果安装在现有项目的企业库5.0位置上,将会导致错误。 - Suncat2000

1

生成

<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />                      
        <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />   
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />      

1
你可能需要做的是在项目属性中将目标框架从".NET Framework 4 Client Profile"更改为".NET Framework 4"。
当你第一次创建控制台项目时,VS 2010默认创建".NET Framework 4 Client Profile"。EL 5编译使用".NET Framework 4",你的项目难以解析EL dll(s)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接