无法加载文件或程序集'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目录,但仍然弹出错误。
谁能指点我一下....
问题是您正在使用的DLL和在您的项目中引用的DLL不同。我不确定清单中的差异是什么,但它可能是版本和/或公钥。
你有几件事可以尝试:
-
打开项目中DLL引用的属性并将Version Specific设置为false
-
删除引用,从bin文件夹中删除DLL,并重新添加引用
-
您的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,并重新添加引用