无法加载文件或程序集'Microsoft.Practices.EnterpriseLibrary.Common'或其某个依赖项

19
我已经在谷歌上搜索了这个问题,但没有找到解决方案。我的网站引用了 DAL(自定义 dll),该 dll 引用了 Enterprise Library 数据访问组件。我已经从 NuGet 包管理器中添加了 Enterprise Library,在尝试构建网站时,出现了这个编译错误:

“错误 44:无法加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Common”或其某一个依赖项。所定位的程序集清单定义与程序集引用不匹配。”

我尝试在 DAL 中设置“Copy Local = True”,针对“Enterprise Library dlls”,并且已将 dlls 与“DAL dll”一起传输到网站的 Bin 目录中,但仍然出现错误。有人可以指导我吗?

请确保所有的EL dll文件都在文件夹中,包括.Common文件。 - Hanlet Escaño
1
我之前已经提到过,dll文件已经被复制到了网站的bin文件夹中。 - Naveed Butt
这是在项目设置为.NET Framework客户端配置文件时出现的问题,尝试将其更改为完整的.NET框架吗?如果我的答案不正确,请原谅。 - adopilot
6个回答

12
问题在于你正在使用的DLL和项目中引用的不同,我不确定清单中的区别是什么,但可能涉及版本和/或公钥。
你有几个尝试的方法:
  1. 打开项目中的DLL引用属性,并将"版本特定"设置为false。
  2. 删除引用,在bin文件夹中删除DLL,然后重新添加引用。
  3. 您还可以在GAC中拥有不同/不正确的版本。为了确保始终使用特定的已知版本,请创建相对于项目目录的程序集文件夹,将dll复制到该目录中,并添加对程序集目录中的DLL的引用,而不是GAC或计算机上其他地方的引用。这将确保仅使用应用程序所针对的特定版本,而不是以后在计算机上更新的任何版本。

3
Version Specific = true 设置为真解决了问题。我认为这是由于我的系统上安装了多个版本的 EnterpriseLibrary ,创建另一个目录并将dll放置在那里可能会产生相同的效果... - Naveed Butt
对我来说,第二种方法有效。我删除了引起错误的引用,然后重新添加它们。 - Saumil

3
这个dll文件很可能在开发人员的机器上作为某些Windows应用程序安装的一部分而存在于GAC中(我最好的猜测是Visual Studio或SSMS)。 这就是为什么我们在构建机器上很可能会收到警告或错误,因为我们尽力保持GAC与生产服务器一样干净。
要手动下载文件,您可以前往https://servicelocation.codeplex.com/
要解决构建警告和错误,您只需要运行NuGet命令来安装CommonServiceLocation package。该软件包仅包含此一个dll文件。自2008年以来,Microsoft仅发布了1个版本(1.0.0.0)的此文件。该文件与所有.NET版本和所有Unity版本完全兼容。

3

NuGet CommonServiceLocator

Install-Package CommonServiceLocator

1
我能够通过在app.config文件中删除所有日志记录引用来解决此问题:
, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null

ie:

    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, 
Microsoft.Practices.EnterpriseLibrary.Logging, 
Version=6.0.0.0, Culture=neutral, PublicKeyToken=null" 
requirePermission="true" />

成为:

     <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, 
Microsoft.Practices.EnterpriseLibrary.Logging" 
requirePermission="true" />

这不是理想的解决方案,但它确实有效...
企业库配置工具会将值设置回去,因此您需要注意这一点。我知道有一种方法可以告诉配置文件接受这些不匹配的设置,但我不确定具体如何操作。

0

在 Web.Config 中为每个 EnterpriseLibrary 引用设置 PublicKeyToken 值,这对我有所帮助。


0

移除引用,从 bin 文件夹和 VS 中删除 DLL,然后重新添加引用。


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