首页 文章

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

提问于
浏览
8

使用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 会导致运行时异常:

未处理的异常: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 参数 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 回答

  • 2

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

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

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

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

  • 1

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

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

    例如,4.1.1.0是您的版本 .

相关问题