为什么我不能在System.Net.Http引用的解决方案中使用System.Net.Http包?

使用VS2017,我在一个空的解决方案中创建了一个ClassLibrary (.NET Framework 4.6.2)。 然后我在那里安装了System.Net.Http 4.3.2包,并在Class1构造函数中使用了HttpClient类。

然后我创建了一个ConsoleApp (.NET Framework 4.6.2),在Main方法中引用了ClassLibrary并实例化了Class1

现在运行ConsoleApp会导致运行时exception:

未处理的exception:System.IO.FileNotFoundException:无法加载文件或程序集’System.Net.Http,Version = 4.1.1.1,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’或其依赖项之一。 该系统找不到指定的文件。 在[…]中的ConsoleApp1.Program.Main(String [] args)的ClassLibrary1.Class1..ctor()中

在详细的构建日志中,我看到以下消息:

2>“System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”和“System.Net.Http,Version = 4.1.1.1,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”之间存在冲突。

2>选择“System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”,因为它是主要的,“System.Net.Http,Version = 4.1.1.1,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a “ 不是。

假设我无法从ConsoleApp中删除对System.Net.Http引用,因为我在实际项目结构中有这种情况。

  • 使用System.Net.Http引用的Specific Version参数没有帮助。
  • 指定没有帮助

我用谷歌搜索了它,这是一个受欢迎的问题,但我没有找到实际发生的事情以及如何解决这类案件的明确解释。

无法加载文件或程序集System.Net.Http版本4.1.1.0

无法加载文件或程序集“System.Net.Http”或其依赖项之一

关于冲突:

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

发现无法解析错误的同一依赖程序集的不同版本之间发生冲突

我想知道你为什么选择使用NuGet包而不是使用Reference Manager加载适当的程序集。 默认情况下,很多项目模板VS都包含System.Net.Http。 如果您使用NuGet包资源管理器来安装程序集,那么这两个选项之一应该会有所帮助:

  1. 删除NuGet包并使用Reference Manager中指定的版本(在Assemblies / Framework下查看),虽然我打赌这已经被选中了。

  2. 在Reference Manager中取消选择已分配的System.Net.Http版本,并使用随NuGet一起安装的版本。

就个人而言,我认为选项1更好,除非您绝对需要仅在NuGet最新版本中找到的特定内容。

解决此问题的最佳和最简单的方法是使用绑定重定向,如上所述。 但版本控制看起来很糟糕。

只需将oldVersion指定为0.0.0.0-5.0.0.0,将newVersion指定为4.1.1.0

例如,4.1.1.0是您的版本。