18

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

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

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

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

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

谁能指导我这个....

4

5 回答 5

11

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

你有几件事要尝试:

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

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

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

于 2011-12-08T18:43:18.423 回答
3

NuGet CommonServiceLocator

Install-Package CommonServiceLocator
于 2013-10-23T03:36:16.420 回答
3

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

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

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

于 2014-09-08T16:06:36.080 回答
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" />

这并不理想,但它确实有效......

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

于 2017-04-04T19:34:48.047 回答
0

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

于 2015-12-23T17:02:01.097 回答