.NET的含义是什么?' primary'何时选择冲突dll参考?

时间:2014-07-01 10:09:56

标签: .net

我在清单中存在的dll版本和build文件夹中存在的实际版本时遇到了一些问题。 将构建选项更改为详细信息提供了以下信息:

  

之间存在冲突   “Microsoft.Practices.EnterpriseLibrary.Common,Version = 5.0.505.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35“and   “Microsoft.Practices.EnterpriseLibrary.Common,Version = 6.0.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35“。

     

“Microsoft.Practices.EnterpriseLibrary.Common,Version = 5.0.505.0,   选择Culture = neutral,PublicKeyToken = 31bf3856ad364e35“因为   它是主要的和“Microsoft.Practices.EnterpriseLibrary.Common,   Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35“是   不

在第二部分中,它说选择了特定版本,因为它是主要版本。

小学的意思是什么?

问候。

1 个答案:

答案 0 :(得分:12)

您要求MSBuild解决DLL Hell问题。它必须将Microsoft.Practices.EnterpriseLibrary.Common.dll复制到您的构建输出目录,以便您可以运行您的程序。但是你引用了它的两个不同版本。这是行不通的,一个人会覆盖另一个人,而另一个人将会赢得胜利。

因此需要猜测哪一个更“重要”。其中一个程序集具有“主”依赖关系,它直接引用Microsoft.Practices.EnterpriseLibrary.Common.dll中的类型。另一个程序集具有间接依赖项,它使用使用版本6.0.0.0的asssembly构建的程序集。强迫猜测,MSBuild假设主要的更重要。

这只是猜测。 可能工作,您需要在app.exe.config文件中使用<BindingRedirect>将6.0.0.0版程序集的请求映射到自6.0以来的5.0.505.0版本。 0.0版本将不可用。主要版本不匹配永远不是好消息,运行时的TypeLoadException或MissingMethodException不应该让您感到惊讶。如果这不起作用,那么在GAC中安装这些程序集可能是一种解决方法,无需以这种方式复制DLL。当然,真正的解决办法是只有一个特定的依赖。