使用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?
答案 0 :(得分:2)
我想知道您为什么选择使用NuGet包而不是使用Reference Manager加载适当的程序集。默认情况下,很多项目模板VS都包含System.Net.Http。如果您使用NuGet包资源管理器来安装程序集,那么这两个选项中的一个应该会有所帮助:
删除NuGet包并使用Reference Manager中指定的版本(在Assemblies / Framework下查看),虽然我打赌这已经被选中了。
在Reference Manager中取消选择已分配的System.Net.Http版本,并使用随NuGet安装的版本。
我个人认为选项1更好,除非您绝对需要仅在NuGet最新版本中找到的特定内容。
答案 1 :(得分:1)
解决此问题的最佳和最简便方法是使用绑定重定向,如前所述。但是版本看起来不对。
只需将oldVersion指定为0.0.0.0-5.0.0.0,将newVersion指定为4.1.1.0
例如,您的版本是4.1.1.0。