在冲突 dll 引用之间进行选择时,'primary' .NET 是什么意思?



我在清单中存在的dll版本和构建文件夹中存在的实际版本方面遇到了一些麻烦。将构建选项更改为详细将给出以下信息:

有一个冲突"Microsoft.Practices.EnterpriseLibrary。常见的,Version = 5.0.505.0,文化=中性,PublicKeyToken=31bf3856ad364e35"one_answers"Microsoft.Practices.EnterpriseLibrary。常见,= 6.0.0.0版本,文化=中立,都必须31 bf3856ad364e35"。

" Microsoft.Practices.EnterpriseLibrary。常见的,Version = 5.0.505.0,选择文化=中性,PublicKeyToken=31bf3856ad364e35"是因为它是"microsoft . practices . enterprise . library . common",版本=6.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35"是不是。

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

primary是什么意思?

问候。

您要求MSBuild解决DLL Hell问题。它必须复制microsoft.practicesenterpriselibrary.com .dll到你的构建输出目录,这样你才能运行你的程序。但是你引用了两个不同的版本。这是行不通的,一个会覆盖另一个,谁赢就很难说了。

所以它需要猜测哪个更"重要"。你的一个程序集有一个"主要"依赖,它直接引用microsoft.practicesenterpriselibrary.common .dll中的类型。另一个程序集具有间接依赖项,它使用使用版本为6.0.0.0的程序集构建的程序集。被迫猜测,MSBuild假设主要的一个更重要。

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

相关内容

最新更新