为什么我不能在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包资源管理器来安装程序集,那么这两个选项之一应该会有所帮助:
-
删除NuGet包并使用Reference Manager中指定的版本(在Assemblies / Framework下查看),虽然我打赌这已经被选中了。
-
在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是您的版本。