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

问题描述 投票:0回答:10

我正在将 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

 {
  "version": "1.0.0-*",

  "dependencies": {
    "log4net": "2.0.7",
    "NETStandard.Library": "1.6.1",
    "Newtonsoft.Json": "9.0.1",
    "StackExchange.Redis": "1.2.1"
  },

  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    }
  }
}

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

<packages>
  <package id="Castle.Core" version="4.0.0" targetFramework="net462" />
  <package id="log4net" version="2.0.7" targetFramework="net462" />
  <package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" />
  <package id="Moq" version="4.7.1" targetFramework="net462" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
  <package id="StackExchange.Redis" version="1.2.1" targetFramework="net462" />
  <package id="System.Diagnostics.DiagnosticSource" version="4.0.0" targetFramework="net462" />
  <package id="System.IO" version="4.1.0" targetFramework="net462" />
  <package id="System.IO.FileSystem" version="4.0.1" targetFramework="net462" />
  <package id="System.IO.FileSystem.Primitives" version="4.0.1" targetFramework="net462" />
  <package id="System.IO.FileSystem.Watcher" version="4.0.0" targetFramework="net462" />
  <package id="System.Linq" version="4.1.0" targetFramework="net462" />
  <package id="System.Net.Http" version="4.1.1" targetFramework="net462" />
  <package id="System.Net.NameResolution" version="4.0.0" targetFramework="net462" />
  <package id="System.Runtime" version="4.1.0" targetFramework="net462" />
  <package id="System.Runtime.Extensions" version="4.1.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.Algorithms" version="4.2.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.Encoding" version="4.0.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.Primitives" version="4.0.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.X509Certificates" version="4.1.0" targetFramework="net462" />
  <package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="net462" />
  <package id="System.Threading.Thread" version="4.0.0" targetFramework="net462" />
</packages>
c# .net .net-core porting .net-framework-version
10个回答
42
投票

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


31
投票

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

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

现在又可以用了。 :)


15
投票

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

例如如果有类似的内容请删除

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
  </dependentAssembly>

5
投票

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


4
投票

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

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

例如,4.1.1.0 是您的版本。


4
投票

我在 .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 部分就可以了。


2
投票

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

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

然后:

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

所以我添加了 "System.Net.Http": "4.1.1", 在一个项目中..

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


2
投票

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


0
投票

我尝试了各种解决方案(删除 dependentAssembly 或指定绑定重定向)。它们都不起作用。

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

enter image description here


0
投票

这个问题真让我抓狂!自首次报道以来已有多年,但似乎从未成功。我最近在 Visual Studio 2022 中开发解决方案时遇到了这个障碍。

好消息是,Githut 线程中提到的解决方法确实有效。有关更多背景信息,这是一个很好的起点:[“无法加载 System.Net.Http,Version=4.x.y.z”][1]

解决方案非常简单,您所需要做的就是添加绑定重定向。 一些注意事项:

  • 确保添加绑定重定向无处不在此 nuget 被引用
  • 使用最低程序集版本,而不是最高版本。这很愚蠢,但是当我像平常一样尝试使用最高版本时,我仍然遇到了这个问题
    <?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>
  • 您可能还需要将以下内容添加到项目文件中,但就我而言,没有必要:
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    [1]:https://github.com/dotnet/standard/issues/891
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.