当我们编译程序目标框架选为 .NET Framework 4.5/4.6/4.7/4.8 时,CLR 运行时是如何判断我们究竟应该用哪一个 .NET Framework 呢?.NET Framework 的版本到底由哪些部分组成?我们编译 .NET Framework 时选择的版本决定了什么?


让我对这个问题产生兴趣的原因是:

  • 我将程序编译的目标框架选为 .NET Framework 4.8;在一台安装了 .NET Framework 4.6 的电脑上提示缺少 .NET Framework 4.8;删除了随编译一起生成的 app.config 文件后程序能够正常运行。
  • 另一个程序,我明明将程序编译的目标框架选为 .NET Framework 4.5,但在一台没有安装任何额外 .NET Framework 的 Windows 7 的电脑上提示缺少的是 .NET Framework 4.0。

这里的疑点在于为什么以上两种看似类似的情况,提示的框架版本却不同。其中的 app.config 文件成为了调查此问题的突破口。

配置支持的运行时

观察程序附带的 app.config 文件,我们发现支持的运行时版本是 v4.0,sku 版本是 4.8。

1