无法加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Common”或其依赖项之一

时间:2011-12-08 12:48:56

标签: c# asp.net enterprise-library nuget nuget-package

我已经搜索了谷歌,但找不到问题的解决方案。

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

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

  

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

不匹配

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

任何人都可以指导我......

5 个答案:

答案 0 :(得分:9)

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

您有几件事需要尝试:

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

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

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

答案 1 :(得分:4)

NuGet CommonServiceLocator

Install-Package CommonServiceLocator

答案 2 :(得分:2)

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

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

要修复构建警告和错误,只需运行NuGet命令即可安装CommonServiceLocation package。该程序包仅包含此一个dll文件。自2008年以来,Microsoft仅发布了此文件的1个版本(1.0.0.0)。该文件与所有.NET版本和所有Unity版本完全兼容。

答案 3 :(得分:0)

为Web.Config中的每个EnterpriseLibrary引用设置PublicKeyToken值为我修复了它。

答案 4 :(得分:0)

我可以通过从app.config文件中删除 ALL 日志记录引用来解决此问题::

, 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" />

这不太理想,但确实有效......

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