C# 遇见System.Net.Http不兼容的解决方案

背景

假设我有一个项目A,调用B项目里面的HttpClient。
A里面的System.Net.Http引用路径为(版本4.0.0.0)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll

B里面的System.Net.Http引用路径为(版本4.2.0.0)

Microsoft Visual Studio\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll

因此,在A调用的过程中,提示

未能加载文件或程序集“System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。

 

解决方案

方案一

修改app.config里面的配置到4.0.0.0,这样就不会提示版本问题了。

<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" /> //4.2.0.0
      </dependentAssembly>

如果嫌弃版本太低,非得用4.2.0.0

方案二

既然说找不到文件,那么想办法把缺失的文件补回就行。

如果A中没有使用到System.Net.Http,可以将它从引用中移除。这样编译的时候会自动复制到输出目录。
或者是把复制本地:true(不一定有效,仅针对使用nuget包的情况)

 

没有搞明白的问题是,我其他项目都是同一套框架,却是默认引用Microsoft.NET.Build.Extensions....

 

 

 

参考链接:https://github.com/dotnet/runtime/issues/24382

posted @ 2022-11-01 18:03  樱花落舞  阅读(1735)  评论(0编辑  收藏  举报