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....