繁体   English   中英

"无法加载文件或程序集 System.Net.Http 版本 4.1.1.0"

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

我正在将 Net Framework 4 dll 移植到 Net Core。 在移植我的单元测试项目时,运行一些特定测试(不是全部)时出现异常。

System.IO.FileLoadException:无法加载文件或程序集“System.Net.Http,Version=4.1.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)

这是我的 dll 的 project.json

这是单元测试项目的 Packages.config

通过将 System.Net.Http 更新到 4.3.1 来修复它

我得到了这个问题,并意识到这是因为我有两个不同的参考。 一个参考来自我的项目库,第二个是 .Net Standard 库的依赖项,因此是 Nuget 包。 解决步骤如下:

  • 删除对System.Net.Http的引用(项目 => 添加引用 => 删除引用)。
  • 保留 System.Net 和 System.Net.Http Nuget 包
  • 运行Update-Package –reinstall System.Net.Http以恢复引用。

现在它又工作了。 :)

转到 app.config 并删除所有引用 System.Net.Http 的行。

我的问题是我的服务有一个引用程序集,该程序集引用了较新版本的 System.Net.Http。 我已经通过更新服务中的 System.Net.Http 解决了这个问题。

解决此问题的最佳和最简单的方法是使用绑定重定向。

只需将旧版本指定为 0.0.0.0-5.0.0.0,将新版本指定为 4.1.1.0

例如,4.1.1.0 是您的版本。

我遇到了这个问题,而我有 10 个相互依赖的项目。 我通过在依赖的项目之一中添加它要求的版本来解决这个问题。 编译不需要它,但似乎添加它,在恢复时修复了其他项目中的版本。 所以它是:

无法加载文件或程序集“System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。 该系统找不到指定的文件。

然后:

无法加载文件或程序集“System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。 该系统找不到指定的文件。

所以我在一个项目中添加了“System.Net.Http”:“4.1.1”。

这实际上解决了问题,同时恢复了 8 个项目。

现在初级程序员解决方案......仔细检查您是否也在正确的位置进行了 Nuget Package Manager 中 Jawen 和 Jean 建议的更新。 请记住,您的项目和测试项目可能有一个解决方案,因此请仔细检查以更新两组参考。

我在.NET Framework 4.8 项目中引用 System.Net.Http 版本 4.2.0.0 时遇到了同样的问题。

仔细阅读异常信息,我注意到有一个名为“FusionLog”的条目。
它指出在我的 App.config 文件中 System.Http.Net 的绑定中存在版本重定向。

在 App.config 中,我发现了一个 XML 部分,例如:

 <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0"/> </dependentAssembly> </assemblyBinding> </runtime>

删除整个 assemblyBinding 部分就成功了。

我同意让。 删除对程序集的引用,然后通过Nuget添加新的引用! 实际的System.Net.Http版本无关紧要。 删除对程序集的引用后,一切正常,版本4.3.2

我尝试了各种解决方案(删除dependentAssembly 或指定绑定重定向)。 他们都没有工作。

但是,对我有用的唯一解决方案是从 Visual Studio 将 System.Net.Http 的特定版本(或任何给您版本问题的 DLL)显式设置为 False。

在此处输入图片说明

这个问题真的让我抓狂! 自从它第一次被报道以来已经有好几年了,但似乎它从来没有成功过。 我最近在 Visual Studio 2022 中开发解决方案时遇到了这个问题。

好消息是,Githut 线程中提到的解决方法确实有效。 有关更多背景信息,这是一个很好的起点:["Could not load System.Net.Http, Version=4.xyz"][1]

解决方案非常简单,您需要做的就是添加绑定重定向。 几个警告:

  • 确保在引用此 nuget 的任何地方<\/strong><\/em>添加绑定重定向<\/li>
  • 使用最低<\/strong><\/em>的汇编版本,而不是最高的版本。 这很愚蠢,但是当我尝试使用通常使用的最高版本时,我仍然遇到了这个问题
     <?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Net.Http" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" \/> <bindingRedirect oldVersion="0.0.0.0-4.6.26011.1" newVersion="4.2.0.0" \/> <\/dependentAssembly> <\/runtime> <\/configuration><\/code><\/pre>
    <\/li>
  • 您可能还需要将以下内容添加到您的项目文件中,但在我的情况下,这不是必需的:
     <RestoreProjectStyle>PackageReference<\/RestoreProjectStyle> <AutoGenerateBindingRedirects>true<\/AutoGenerateBindingRedirects><\/code><\/pre>
    [1]: https<\/a> :\/\/github.com\/dotnet\/standard\/issues\/891<\/li><\/ul>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM