在冲突dll引用之间进行选择时,.NET对"主要"的含义是什么?

Cod*_*elp 12 .net

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

"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" .

之所以选择"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"不是.

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

小学的意义是什么?

问候.

Han*_*ant 14

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

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

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