我在清单中存在的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.当然,真正的解决方案是只有一个特定的依赖.