【问题标题】:Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common' or one of its dependencies无法加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Common”或其依赖项之一
【发布时间】:2011-12-08 12:48:55
【问题描述】:

我已经在 google 上搜索过,但找不到问题的解决方案。

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

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

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

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

谁能指导我这个....

【问题讨论】:

  • 请确保所有 EL dll 都在文件夹中,包括 .Common 的。
  • 我上面也提到过,dll已经复制到网站的bin文件夹中
  • 当项目设置为 .net 框架客户端配置文件尝试将其更改为全点网络时,是否存在此问题?如果回答错误,请见谅

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


【解决方案1】:

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

你有几件事要尝试:

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

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

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

【讨论】:

  • 设置Version Specific = true 解决了这个问题。我认为这是由于我的系统上安装了多个版本的EnterpriseLibrary 并创建另一个目录并将 dll 放在那里可能会产生相同的效果...
  • 对我来说 (2) 有效。我删除了给出错误的引用并再次读取它们
【解决方案2】:

我能够通过从 ALL 中删除 app.config 文件中的 Logging 引用来解决此问题::

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      NuGet CommonServiceLocator

      Install-Package CommonServiceLocator
      

      【讨论】:

        【解决方案5】:

        为 Web.Config 中的每个 EnterpriseLibrary 引用设置 PublicKeyToken 值已为我解决了这个问题。

        【讨论】:

          【解决方案6】:

          移除引用,删除bin文件夹和VS中的DLL,重新添加引用。

          【讨论】:

            猜你喜欢
            • 2021-12-12
            • 2012-01-14
            • 1970-01-01
            相关资源
            最近更新 更多