无法加载文件或程序集'System.Net.Http

Dan*_*Dan 15 .net c# asp.net

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

"System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"和"System.Net.Http,Version = 4.1.1.2,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"之间存在冲突.(TaskId: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"不是.(TaskId: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包来到这里.在我安装之前我没有遇到任何问题,我认为其中的一个部分可能导致了这个问题.我试图卸载它但是没有用.

Ger*_*ius 13

安装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>
Run Code Online (Sandbox Code Playgroud)

  • 我将其标记为答案。尽管删除参考文献对我有用,但它可能涵盖了其他一些问题。请尝试两种方法,然后选择最适合您的一种。 (2认同)

Ank*_*ain 9

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

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

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

在这里您可以看到运行时如何定位程序集

解决方案: 只需在启动项目的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>
Run Code Online (Sandbox Code Playgroud)

这种配置指示运行,以解决System.Net.Http与装配4.0.0.0版本而已,只要它看起来这个大会之间的任何版本0.0.0.04.2.0.0

这是完整的架构:

<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> 
Run Code Online (Sandbox Code Playgroud)


Gre*_*olf 7

如果使用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>
Run Code Online (Sandbox Code Playgroud)


Rag*_*hav 7

从 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>
Run Code Online (Sandbox Code Playgroud)

并将其替换为

  <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>
Run Code Online (Sandbox Code Playgroud)

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


sks*_*kst 5

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

{“无法加载文件或程序集'System.Net.Http,版本= 4.2.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。”:“ System.Net。 Http,版本= 4.2.0.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a“}

我过去了,只能得到FileNotFoundException

System.IO.FileNotFoundException HResult = 0x80070002消息=无法加载文件或程序集'System.Net.Http,版本= 4.2.0.0,区域性=中性,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.2附带的System.Net.Http的引用,并且一切都恢复了正常。