如何解决“无法解决之间的冲突”错误?

2024-07-03

最近将 log4net.dll 添加到我们的数据对象中。我们的数据对象构建完美,但是当您尝试构建引用我们的数据对象的任何内容时,您会收到以下错误:

无法解决“log4net,Version=1.2.10.0,Culture=neutral,PublicKeyToken=692fbea5521e1304”和“log4net,Version=1.2.9.0,Culture=neutral,PublicKeyToken=b32731d11ce58905”之间的冲突。任意选择“log4net,Version=1.2.10.0,Culture=neutral,PublicKeyToken=692fbea5521e1304”。

我发现了以下内容thread https://stackoverflow.com/questions/1871073/resolving-msb3247-found-conflicts-between-different-versions-of-the-same-depen这使我能够获得有关该问题的更多信息。

log4net 在我们的项目中用于多种用途。例如,crystal 将 1.2.9 安装到 GAC 中。我知道 infragitics 使用 1.2.10。

我们有一个特定的目录 - 调用它c:\references- 我们构建所有 dll 的位置,并且所有应用程序都使用它来引用我们的内部 dll。因此,我专门将数据对象中的引用设置为版本 1.2.11 的 c:\references\log4net.dll。这很奇怪,因为在上面的错误消息中您没有看到 1.2.11。该 dll 以特定版本引用:= True & Copy Local:= True。我检查了 log4net 的构建目录和 1.2.11 确实已正确移动。

如果有帮助,这里是一些详细的错误消息:

There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905".
  No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.
      References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll].
          C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll

   References which depend on "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905" [C:\Program Files (x86)\Business Objects\Common\4.0\managed\log4net.dll].          c:\references\DBObjectAdoNet.dll
            Project file item includes which caused reference "c:\references\DBObjectAdoNet.dll".

Update:到目前为止,我发现修复该错误的唯一方法是在引用 DBObjectAdoNet.dll 的任何内容中引用 log4net。这对我们来说并不是一个真正可用的解决方案,因为几乎 我们整个系统中的一切都使用它。

第二次更新:尝试将 log4net 放入 GAC 中,认为可以解决问题,但仍然没有成功。

第三次更新:我已向 Microsoft 拨打了支持电话。他们希望我使用 Assembly.LoadFrom() ,但我对此非常非常犹豫,因为我们在一个应用程序中进行了超过 300,000 次调用,并且每次调用都需要反射,这会大大减慢速度。

我发现如果我卸载机器上的 crystal 运行时,错误就会消失,这没有多大意义,因为据我所知,它唯一做的就是从 GAC 下删除 log4net 1.2.10.0 .NET Framework 2.0 文件夹,这应该不重要,因为该应用程序是 .NET Framework 4 应用程序。


打开您的项目文件(.csproj在 C# 中或.vbproj在 VB.NET 中)进行编辑。

确保 log4net 参考是完全限定类型名称 http://msdn.microsoft.com/en-us/library/yfsftwz6.aspx, has HintPath and SpecificVersion=True.

<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
  <HintPath>..\references\log4net.dll</HintPath>
  <SpecificVersion>True</SpecificVersion>
</Reference> 

保存文件并尝试重建。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决“无法解决之间的冲突”错误? 的相关文章

随机推荐