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

时间:2017-07-26 16:57:36

标签: c# .net visual-studio-2017

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

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

现在运行 ConsoleApp 会导致运行时异常:

  

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

中的args)

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

  

2 - ; “System.Net.Http,Version = 4.0.0.0之间存在冲突,   Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“和   “System.Net.Http,Version = 4.1.1.1,Culture = neutral,   公钥= 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的引用,因为我在实际项目结构中遇到了这种情况。

  • 使用Specific Version System.Net.Http参数进行游戏 参考没有帮助。
  • 指定<bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" />没有帮助

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

Could not load file or assembly System.Net.Http version 4.1.1.0

Could not load file or assembly 'System.Net.Http' or one of its dependencies

关于冲突:

What does .NET mean by 'primary' when choosing between conflict dll reference?

Found conflicts between different versions of the same dependent assembly that could not be resolved error

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

解决此问题的最佳和最简便方法是使用绑定重定向,如前所述。但是版本看起来不对。

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

例如,您的版本是4.1.1.0。