[英]Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common in WCF
[英]Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common' or one of its dependencies
我已经在谷歌上搜索了这个,但找不到问题的解决方案。
我的网站引用 DAL(自定义 dll),后者引用企业库数据访问组件。
我已经从NuGet Package Manager
添加了企业库,当我尝试构建网站时弹出此编译错误:
错误 44 无法加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Common”或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配
我已经尝试在Enterprise Library dlls
的 DAL 中设置Copy Local = True
并且 dll 与DAL dll
一起传输到网站的 Bin 目录,但仍然弹出错误。
任何人都可以在这方面指导我......
问题是您正在使用的DLL和项目中引用的DLL是不同的。 我不确定清单中的差异是什么,但它可能是版本和/或公钥。
你有几件事要尝试:
在项目中打开DLL引用的属性,并将Version Specific设置为false。
删除引用,从bin文件夹中删除DLL,然后重新添加引用。
您的GAC中也可能有不同/不正确的版本。 为了确保您始终使用特定的已知版本创建相对于项目目录的程序集文件夹,将dll复制到该目录,并在程序集目录中添加对DLL的引用,而不是在GAC或其他地方添加在你的机器上。 这将确保仅使用您为应用程序定位的特定版本,而不是稍后在您的计算机上更新的任何版本。
NuGet CommonServiceLocator
Install-Package CommonServiceLocator
作为某些Windows应用程序安装的一部分,这个dll可能在开发人员机器上的GAC中(我最好的猜测是Visual Studio或SSMS)。 这就是为什么我们可能会在构建机器上收到警告或错误,我们会尽力保持GAC像生产服务器一样干净。
要手动下载文件,您可以访问https://servicelocation.codeplex.com/
要修复构建警告和错误,只需运行NuGet命令即可安装CommonServiceLocation包 。 该程序包仅包含此一个dll文件。 自2008年以来,Microsoft仅发布了此文件的1个版本(1.0.0.0)。该文件与所有.NET版本和所有Unity版本完全兼容。
为Web.Config中的每个EnterpriseLibrary引用设置PublicKeyToken值为我修复了它。
我能够通过删除app.config文件中的所有日志记录引用来解决此问题::
, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null
即:
<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" />
这不是理想的,但确实有效......
企业库配置工具将值设置回来,因此您需要注意这一点。 我知道有一种方法可以告诉配置文件接受这些不匹配的设置 - 但我不知道如何。
去掉引用,从bin文件夹和VS中删除DLL,重新添加引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.