无法加载文件或程序集'Microsoft.Practices.EnterpriseLibrary.Common&

本文关键字:Microsoft Practices EnterpriseLibrary Common 加载 文件 程序集 | 更新日期: 2023-09-27 18:17:05

我已经在谷歌上搜索了这个问题,但没有找到解决问题的方法。

我的网站引用DAL(自定义dll),它引用企业库数据访问组件。

我已经从NuGet Package Manager添加了企业库,当我试图构建网站时,这个编译错误弹出:

错误44无法加载文件或程序集"Microsoft.Practices.EnterpriseLibrary"。Common’或它的一个依赖项。定位的程序集的清单定义与程序集引用

不匹配。

我已经尝试在DAL中为Enterprise Library dlls设置Copy Local = True,并且dll与DAL dll一起转移到网站的Bin目录,但仍然弹出错误。

谁能指点我一下....

无法加载文件或程序集'Microsoft.Practices.EnterpriseLibrary.Common&

问题是您正在使用的DLL和在您的项目中引用的DLL不同。我不确定清单中的差异是什么,但它可能是版本和/或公钥。

你有几件事可以尝试:

  1. 打开项目中DLL引用的属性并将Version Specific设置为false

  2. 删除引用,从bin文件夹中删除DLL,并重新添加引用

  3. 您的GAC中也可能有不同/不正确的版本。为了确保始终使用特定的已知版本,创建一个相对于项目目录的程序集文件夹,将dll复制到该目录,并在程序集目录中添加对dll的引用,而不是在GAC或计算机上的其他地方添加引用。这将确保只使用您为应用程序指定的特定版本,而不是稍后在您的机器上更新的任何版本。

NuGet CommonServiceLocator

Install-Package CommonServiceLocator

这个dll可能在开发人员机器的GAC中,作为某些windows应用程序安装的一部分(我最好的猜测是Visual Studio或SSMS)。这就是为什么我们可能会在构建机器上得到警告或错误,我们尽最大努力保持GAC像生产服务器一样干净。

要手动下载文件,您可以访问https://servicelocation.codeplex.com/

要修复构建警告和错误,您只需要运行NuGet命令来安装CommonServiceLocation包。该包只包含这一个dll文件。自2008年以来,微软只发布了这个文件的1个版本(1.0.0.0)。该文件与所有。net版本和所有Unity版本完全兼容。

我能够通过从中删除所有在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" />

这是不理想的,但它确实工作…

企业库配置工具,设置值回来,所以你需要注意。我知道有一种方法可以告诉配置文件接受这些不匹配的设置-但我不确定如何。

为Web中的每个EnterpriseLibrary引用设置PublicKeyToken值。

删除引用,从bin文件夹和VS中删除DLL,并重新添加引用