C#“无法解决X和Y之间的冲突”

时间:2016-05-20 11:25:19

标签: c# .net

我有以下解决方案结构:

Solution    
      \_ProjectA
      \_ProjectB (uses 3rd party DLL v1)
      \_ProjectC (uses 3rd party DLL v2)

项目A没有直接引用第三方DLL,只是调用项目B和C中的方法。

项目B和C DLL引用的属性已将Specific Version设置为True

我在构建期间收到以下警告:

  

“无法解决X和Y之间的冲突。任意选择Y”。

正如预期的那样,只有使用所选DLL的项目才能正常工作。 如何强制这些项目使用这些特定版本?

1 个答案:

答案 0 :(得分:4)

  

如何强制这些项目使用这些特定版本?

基本上你不能。当然甚至不容易接近。即使项目A没有直接使用第三方DLL,CLR仍然需要加载它们......此时你已经加载了以下程序集的AppDomain:

  • ProjectA程序集
  • ProjectB程序集
  • ProjectC程序集
  • ThirdParty程序集,无论选择哪个版本

认为您可以一次将同一个程序集的多个版本加载到同一个AppDomain

选项:

  • 可能能够使用单独的AppDomain,一个使用项目B及其版本的第三方程序集,另一个使用项目C及其版本。根据我的经验,这种事情非常繁琐。
  • 分叉第三方库(如果它是开源的),这样您就可以使用不同的程序集名称构建自己的副本 - 将其用于项目B并让项目C使用" normal& #34;一个
  • 将项目B和C更改为使用相同版本

我怀疑,到目前为止,这些选项中的最后一个是最容易维护的。