提示用户安装正确的dotnet版本的错误信息不正确

The error message that prompts user to install the correct dotnet version is incorrect

我已经创建了一个 Windows 表单项目并针对 .NET 4.5

当我 运行 在没有安装 .NET 4.0 的机器上运行 exe 文件时,我收到以下错误消息:

当我再次安装 .Net 4.0 和 运行 exe 时,我收到以下错误消息:

为什么第一条消息没有说明所需的 .NET 版本是 4.5?

根据this article,应用程序运行的 .NET Framework 版本按以下顺序确定:

  1. 配置文件(.config
  2. 编译版本
  3. 已安装最新版本

默认情况下,如果您在 Visual Studio 中设置目标框架,您将有一个与 .exe 一起部署的 .config 文件。在这个 .config 文件中 Visual Studio 创建了一个元素 <supportedRuntime>,它有两个属性:versionsku

.NET 4.5 的默认元素如下所示:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

version 是受支持的 CLR 的版本——但这不一定与 .NET Framework 的版本相同,因为从 4.0 到 4.7 的所有 .NET Framework 都使用 CLR 4.0。
只有 sku(库存单位)指定您的应用程序支持的 .NET Framework 的确切版本。

根据 this articlesku 属性(包含版本号)仅从 .NET Framework 4.0 开始被识别。

附带说明:.NET 3.5 也使用了 sku,但仅指定您支持 .NET Framework Client Profile (sku="client")自 .NET 4.5 以来不再存在。

所以结论是:
您收到第一条错误消息是因为 .NET Framework 3.5 中的 CLR 2.0 加载程序对 sku 属性一无所知。它只知道您正在请求 .NET 4.0 CLR。 (如果您没有 .config 文件,则所需的 CLR 版本编译为 .exeinto the manifest,在您的情况下为 v4.0.30319。)

仅在安装 .NET Framework 4.0 之后,CLR 4.0 加载程序现在读取 sku 属性,因此知道您还必须安装 .NET Framework 4.5。这就是您收到这两条错误消息的原因。