无语了,这笃NET。

页面运行过程中,出现了一个错误:

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

类似这样:

未能加载文件或程序集“System.Net.Http, Version=4.2.0.0,。。。”或它的某一个依赖项_未能加载文件或程序集


这是一个几年前的项目。当时还是.NET 4.6.2;今年重新拿起来开发,开发环境的操作系统从WIN7变成了WIN10,.NET也升级到了…NET 4.8。估计是跟这个有关系。

卸载项目,编辑项目文件,将里面指定的System.Net.Http版本号去掉:

<Reference Include="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

==>

<Reference Include="System.Net.Http" />

但是仍然报错,只不过版本号变成了4.2.0.0:

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

考究引用的dll路径,是C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.8\System.Net.dll,估计.NET4.8下这个System.Net.Http,版本是4.2.0.0。那么为啥还会报错,搞不懂。

在网上寻寻觅觅,有人说要将web.config里的版本号改回4.0.0.0。我试着将newVersion改成4.0.0.0,果然可以了。但我又改回4.2.0.0,仍然没有问题,再也无法重现当时的错误。

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

这就令人尴尬了。不知道它为什么报错,然后也不知道它为什么又不报错了。微软搞的东西,向来标榜傻瓜式操作,但这一招也错误地用在程序员身上。傻瓜式的操作,掩盖了太多的细节和原理,反而不利于程序员进阶。另外,曾经号称宇宙级IDE的visual studio,2022这个版本,连在文件中查找这个最基本的功能都不能保证了,查一个东西,有些能查出来,有些却不行,简直无法使用。自从印度人接管以后,这个曾经的巨头居然沦落如斯。

参考文章:
​未能加载文件或程序集“System.Net.Http​​


事实证明,还是要改成4.0.0.0。