【问题标题】:Could not load file or assembly 'System.Net.Http无法加载文件或程序集“System.Net.Http”
【发布时间】:2018-04-19 08:21:07
【问题描述】:

在我的构建输出的诊断视图中显示了这种冲突

“System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”和“System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”之间存在冲突”。 (任务编号:20) 选择“System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”是因为它是主要的,而“System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”是不是。 (任务编号:20) 依赖于“System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用 [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.6.1\System. Net.Http.dll]。 (TaskId:20)

我通过添加 RestSharp nuget 包到达这里。在我安装它之前我没有遇到问题,我认为它附带的一个部件可能导致了这个问题。我试图卸载它,但没有奏效。

【问题讨论】:

  • 您是否设置了正确的绑定重定向到版本 4.1.1.2?如果绑定重定向设置不正确,可能会使用 4.0.0.0 作为主程序集。
  • 我找不到引用 4.0.0 的绑定
  • 解决方案:我从配置文件中删除了绑定。现在一切正常。所以你可以试试。
  • @Dan 感谢您在 cmets 中提供解决方案,它在完全相同的情况下帮助了我。可能值得您将此作为答案并将其标记为其他人将来参考! :) 谢谢!
  • 不要对 System.Net.Http 使用任何 bindingRedirect ,从配置文件中删除并且不要认为正在使用女巫版本,这是由您的系统管理的

标签: c# asp.net .net


【解决方案1】:

安装 Nuget 包:System.Net.Http 版本 4.3.3 安装正确的版本=4.1.1.2

这将在您的项目文件中产生以下引用:

<Reference Include="System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\..\..\..\packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll</HintPath>
</Reference>

【讨论】:

  • 我将此标记为答案。尽管删除参考对我有用,但它可能涵盖了其他一些问题。请尝试这两种方法并选择最适合您的方法。
  • @Dan 你长期从事什么工作?
  • 我实际上必须将 System.Net.Http.dll 复制到 ../bin/Debug 文件夹才能使其工作,不知何故安装 NuGet 包并没有将那个 dll 放在那里。另见gertjanvanmontfoort.blogspot.com/2017/11/…
  • 我使用这个解决方案修复了这个问题 配置>
【解决方案2】:

如果你使用 vs2017,一些项目会强制你引用 system.net.http (4.2.0.0) 当您从 nuget(4.3.3 版)安装时,您的 system.net.http 将为 4.1.1.2

->会发生冲突

所以在您的 web.config 或 app.config 中,您可以更改为 4.1.1.2 或 4.2.0.0 取决于运行时复制到 bin 文件夹的版本

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

【讨论】:

  • 几乎为我解决了这个问题——对我有用的实际配置(Azure 应用服务):github.com/domaindrivendev/Swashbuckle/issues/…
  • 注意:你的生产(或部署代码的服务器)通常没有VS2017,所以它的版本是4.1.1.2,你的本地开发(有vs安装)是4.2.0.0
  • Sendgrid 库依赖于 System.Net.Http。我不得不将 .Net Framework 从 4.6.1 升级到 4.7.1
【解决方案3】:

我正在使用 .NET Framework 4.7.2Visual Studio 15.5。当我将 System.Net.Http 4.3.3 升级到 4.3.4 时,收到“无法加载”错误:

{"无法加载文件或程序集'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其之一 依赖关系。系统找不到文件 指定。":"System.Net.Http,版本=4.2.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a"}

我过去只是为了得到一个FileNotFoundException

System.IO.FileNotFoundException HResult=0x80070002 消息=可能 不加载文件或程序集'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其之一 依赖关系。系统找不到指定的文件。

GitHub 上 .NET Core 项目中的这个帖子讨论了这个问题,我发现 GitHub 上 .NET Core 项目中的这篇文章非常有帮助:

https://github.com/dotnet/corefx/issues/25773#issuecomment-350036434

我的(糟糕的)总结:Microsoft 正试图消除对 System.Net.Http NuGet 包的需求,因为它是其他版本问题的解决方法。 .NET Framework 4.7.1VS 15.5 的更改(应该?)完全消除了对它和相关绑定的需求。

我从我的项目中删除了 System.Net.Http NuGet 包,并添加了对 .NET Framework 4.7 中包含的 System.Net.Http 的引用.2,一切又恢复了原状。

【讨论】:

  • 我在使用 VS 2019 和 Net Framework 4.8 时出现错误,使用 System.Net.Http NuGet 包。使用绑定重定向不起作用。
  • 对。尝试按照我的建议删除 NuGet 包和绑定。我的 VS2019/4.8 项目没有它们也能正常工作。
【解决方案4】:

根本原因:当您在应用程序中引用某些第三方库时,通常会遇到此类问题。

例如,您从 NuGet 中获取了 RestSharp(第三方库)的引用。那RestSharp可能使用了System.Net.Http4.2.0.0版本的引用。您的项目还引用了System.Net.Http4.0.0.0(来自 GAC)。现在,当您运行应用程序并尝试调用任何使用 RestSharp 的方法时,同时运行时 (CLR) 会尝试定位版本为 4.2.0.0System.Net.Http 程序集,但无法找到找到所需的版本,它会抛出 System.IO.FileNotFoundException 异常并显示以下错误消息。

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

在这里你可以看到How the Runtime Locates Assemblies

解决方案: 只需在您的启动项目的web.configapp.config 中添加以下配置即可。

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

此配置指示运行时仅在为 0.0.0.04.2.0.0 之间的任何版本查找此程序集时使用 4.0.0.0 版本解析 System.Net.Http 程序集。

这是完整的架构:

<configuration>  
   <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.2.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>  
   </runtime>  
</configuration> 

【讨论】:

    【解决方案5】:

    从 4.6.1 框架升级到 4.7.2 后,我们开始收到此错误,最终解决方案是转到 web 配置文件,找到以下内容:

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

    替换成

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

    上面所做的更改就是:newVersion="4.0.0.0"

    【讨论】:

      【解决方案6】:

      system.net.http 库现在作为 .Net 标准框架的一部分分发,这可能会导致问题,通常是在您将 Nuget 包更新到较新版本时。

      对我有用的解决方案是从 Nuget 中删除 System.Net.Http 包(以及依赖它的 Formatters 包),并删除 app.config 中对 system.net.http 库的所有引用(它们'将通常是依赖程序集)。

      最后,编辑您的项目文件以从框架中添加对 http 的引用,如下所示:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-31
        • 2013-06-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多