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

时间:2017-11-07 03:09:09

标签: c# asp.net .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包来到这里。在我安装之前我没有遇到任何问题,我认为其中的一个部分可能导致了这个问题。我试图卸载它但是没有用。

6 个答案:

答案 0 :(得分:11)

安装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>

答案 1 :(得分:4)

如果使用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>

答案 2 :(得分:2)

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

  

{“无法加载文件或程序集'System.Net.Http,Version = 4.2.0.0,   文化=中性,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,   文化=中性,PublicKeyToken = b03f5f7f11d50a3a'或其中之一   依赖性。系统找不到指定的文件。

GitHub上的 .NET Core 项目中的此线程讨论了此问题,我发现GitHub上的 .NET Core 项目中的这篇帖子非常有帮助:< / p>

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

我的(可怜的)摘要:Microsoft试图消除对 System.Net.Http NuGet软件包的需求,因为它是解决其他发行问题的方法。 .NET Framework 4.7.1 VS 15.5 所做的更改(应该?)消除了对它的需要以及与之关联的绑定。

我从项目中删除了 System.Net.Http NuGet程序包,并添加了对 .NET Framework 4.7中包含的 System.Net.Http 的引用。 .2 ,然后一切恢复正常。

答案 3 :(得分:1)

system.net.http库现在作为.Net Standard Framework的一部分进行分发,这通常会在您将Nuget软件包更新为较新版本时引起问题。

对我有用的解决方案是从Nuget中删除System.Net.Http包(以及依赖于它的Formatters包),并删除app.config中对system.net.http库的所有引用(它们经常会是依赖组件)。

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

enter image description here

答案 4 :(得分:0)

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

例如,您引用了NuGet中的 RestSharp (第三方库)。该RestSharp可能已经使用了System.Net.Http 4.2.0.0版本的引用。您的项目还引用了System.Net.Http 4.0.0.0(来自GAC)。现在,当您运行应用程序并尝试调用使用 RestSharp 的任何方法时,运行时(CLR)会同时尝试找到版本为System.Net.Http的{​​{1}}程序集,如果找不到所需的版本,则会引发4.2.0.0异常并显示以下错误消息。

  

无法加载文件或程序集'System.Net.Http,Version = 4.2.0.0,   文化=中性,PublicKeyToken = b03f5f7f11d50a3a'或其中之一   依赖性。系统找不到指定的文件。

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

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

app.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> System.Net.Http之间寻找任何版本的程序集时才解析具有4.0.0.0版本的0.0.0.0程序集。

这是完整的架构:

4.2.0.0

答案 5 :(得分:0)

从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”