使用VS2017,我在一个空的解决方案中创建了一个类库(.NET Framework 4.6.2(。然后我在那里安装了System.Net.Http 4.3.2软件包,并在Class1
构造函数中使用HttpClient
类。
然后,我创建了一个ConsoleApp(.NET Framework 4.6.2(,引用了ClassLibrary并在Main
方法中实例化了Class1
。
现在运行控制台应用程序会导致运行时异常:
未处理的异常:System.IO.FileNotFound异常:无法加载 文件或程序集 'System.Net.Http, 版本=4.1.1.1, 区域性=中性, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。这 系统找不到指定的文件。 在 类库1.类1..ctor(( at ConsoleApp1.Program.Main(String[] 参数(在 [...]
在详细的构建日志中,我看到以下消息:
2>"System.Net.Http, Version=4.0.0.0, 区域性=中性,公钥令牌=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
参数 参考没有帮助。 - 指定
<bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" />
没有帮助
我用谷歌搜索过它,这是一个流行的问题,但我没有找到关于实际发生的事情以及如何解决这种情况的明确解释。
无法加载文件或程序集 System.Net.Http 版本 4.1.1.0
无法加载文件或程序集"System.Net.Http"或其依赖项之一
关于冲突:
在冲突 dll 引用之间进行选择时,.NET 所说的"主要"是什么意思?
发现同一依赖程序集的不同版本之间的冲突无法解决错误
我想知道为什么您选择使用 NuGet 包而不是使用引用管理器在适当的程序集中加载。默认情况下,在许多项目模板中,VS包含System.Net.Http。如果使用 NuGet 包资源管理器安装程序集,则两个选项之一应该会有所帮助:
-
删除NuGet包并从引用管理器中使用分配的版本(在程序集/框架下查看(,尽管我敢打赌这已经被选中了。
-
在引用管理器中,取消选择分配的 System.Net.Http 版本,并使用随 NuGet 一起安装的版本。
我个人认为选项 1 更好,除非您绝对需要仅在 NuGet 最新版本中找到的特定内容。
如前所述,解决此问题的最佳和最简单的方法是使用绑定重定向。但版本控制看起来不对劲。
只需将旧版本指定为 0.0.0.0-5.0.0.0,将新版本指定为 4.1.1.0
例如,4.1.1.0 是您的版本。