在我的构建输出的诊断视图中显示了此冲突
" 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包来到这里。在我安装之前我没有遇到任何问题,我认为其中的一个部分可能导致了这个问题。我试图卸载它但是没有用。
答案 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的引用,如下所示:
答案 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.FileNotFoundException
或web.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”