【问题标题】:Annoying log4net assemly reference issue in vs 2012vs 2012 中烦人的 log4net 程序集参考问题
【发布时间】:2013-09-20 02:21:50
【问题描述】:

出现以下构建错误。

错误 15 未知的构建错误,'无法加载文件或程序集 'log4net, 版本=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)'

我不太明白发生了什么。 我尝试使用 GUI 作为参考,但没有帮助。已经为此花费了 1.5 小时,但问题仍然存在。

我现在直接进入项目文件,对 log4net 的唯一引用如下:

<Reference Include="log4net, Version=1.2.12.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\ExternalDlls\.NET 4.0\log4net.dll</HintPath>
</Reference>

我仍然收到此错误。为什么还要提到 V1.2.11

提前致谢

【问题讨论】:

  • 我在这里检查了所有相关的 log4net 问题。看起来很特别,虽然引用这个 log4net 的很多问题显然存在。
  • 你为什么不强制你的 .net 应用程序加载 Version=1.2.12.0 ?您可以更改 web.config/app.config。更多信息在这里 - msdn.microsoft.com/en-us/library/7wd6ex19.aspx
  • 这里也提供了一些信息 - stackoverflow.com/questions/8743992/… 我认为那个人的问题与你的类似。
  • 尝试通过包管理器nuget.org/packages/log4net安装Log4net
  • Damith,虽然这确实可以神奇地解决问题,但我更愿意弄清楚这里到底发生了什么,因为我不喜欢感到愚蠢。我得到了一个不引用 1.2.11 的 proj 文件。当我构建项目时,它会引发错误。我想知道发生了什么..

标签: c# .net visual-studio-2012 log4net


【解决方案1】:

好的,最后构建工作了。

我完成了所有其他项目并执行了 Resharper - 删除未使用的引用操作。

完成后,项目开始构建。

【讨论】:

  • 是的。与所描述的问题明显相关!.. 你有时不只是喜欢 VS。
  • 您是否有机会使用水晶报表?我遇到了与 VS 2012 相同的问题,即向水晶报告使用的另一个 log4net.dll 添加引用路径导致错误。它在我编辑报告时添加。如果我删除参考路径,错误就会消失。不幸的是,我每次编辑水晶报告时都必须这样做。 PS:我在所有项目中都使用 NuGet 来维护 log4net。
  • 当 System.Diagnostics Trace 类如此简单和更好时,为什么还有人想在 .NET 应用程序中使用 log4net?
【解决方案2】:

你能检查一下路径 ....\ExternalDlls.NET 4.0\log4net.dll 中实际存在的版本,并查看 GAC 中存在的版本。

在 GAC 中删除版本,从项目文件中删除以下引用并从 ExternalDlls 文件夹中重新添加它

<Reference Include="log4net, Version=1.2.12.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\ExternalDlls\.NET 4.0\log4net.dll</HintPath>
</Reference>

【讨论】:

  • 虽然我喜欢 GAC 的想法,因为那是 proj 文件外部的东西,但我从未将 log4net 放在那里,而且在我检查后它实际上不存在:C:\Windows\system32>gacutil /l log4net Microsoft (R) .NET 全局程序集缓存实用程序。版本 4.0.30319.17929 版权所有 (c) Microsoft Corporation。版权所有。全局程序集缓存包含以下程序集: 项目数 = 0 如果错误,请更正我的命令。
  • 存在版本。我在解决方案中有 15 个项目,每个都很好地引用它,只有一个项目由于某种原因行为不端。
  • 对不起,我不知道该命令,但您可以打开它C:\Windows\assembly,您可以手动查看安装在GAC中的程序集列表
  • 是的,方便快捷。可悲的是没有。命令也可以。
  • 你能检查一下你项目的 bin 文件夹中的 log4net 项目,看看它是什么版本吗?它应该与ExternalDllsversion 相同。如果没有尝试找到其他dll的来源并删除它。
【解决方案3】:

如果您正在创建一个引用 log4net 的 nuget 包,请确保您的 nuspec 文件指定了 log4net 的正确版本(这是我在 log4net 发布新版本后遇到的问题)。并确保如果您不想要最新版本的 log4net,则使用“[”和“]”封装您的版本,这样它就不会获得最新版本。看到这个..http://docs.nuget.org/docs/reference/versioning#Specifying_Version_Ranges_in_.nuspec_Files

希望这对某人有所帮助。

【讨论】:

    【解决方案4】:

    我今天面临这个问题。为了解决这个问题,我通过 Visual Studio 从 Bin 文件夹中删除了 log4net.dll 文件引用。并重建网站。 它会自动获取 log4net dll。这解决了问题。此问题的原因是通过 Visual Studio 进行的引用绑定可能与实际文件版本不一致。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2012-11-04
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多