【问题标题】:Could not load file or assembly System.Net.Http version 4.1.1.0无法加载文件或程序集 System.Net.Http 版本 4.1.1.0
【发布时间】:2017-07-31 22:02:35
【问题描述】:

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

【问题讨论】:

  • 试试dotnet restore
  • @J.Doe 仍然失败
  • 检查绑定重定向或删除错误添加的引用。检查 nuget 合并。

标签: c# .net .net-core porting .net-framework-version


【解决方案1】:

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

【讨论】:

  • 从哪里删除的?
  • 我不必删除 System.Diagnostics.DiagnosticSource,只需更新 System.Net.Http 即可解决!
  • 通过 Nuget 更新(搜索“http”)
  • 更新 NuGet 后,别忘了修复任何绑定重定向。
  • 我努力更新 dll。最终我找到了方法:从解决方案资源管理器中的引用中删除当前的 dll。然后右键单击引用并选择管理 NuGet 包。在搜索区域写:http。注意有 Microsoft.Net.Http 和 System.Net.Http。选择 System.Net.Http。当您选择它时,您可以在右侧面板中看到 dll 的版本。祝你好运!!
【解决方案2】:

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

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

现在它又可以工作了。 :)

【讨论】:

  • 我遇到了这个问题,这已经为我解决了!删除了引用并从控制台重新安装了 nuget 包。谢谢!
  • 完美解决问题。感谢您提供明确的步骤。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 我该怎么做?程序集的内容不是不能改变吗?
    【解决方案5】:

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

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

    例如,4.1.1.0 是你的版本。

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        我遇到了这个问题,而我有 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 个项目。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

              好消息是,Githut 线程中提到的解决方法确实有效。有关更多背景信息,这是一个很好的起点:["Could not load 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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-26
                • 2018-04-19
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多