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

时间:2017-10-02 12:21:58

标签: c# .net winforms windows-runtime runtime-error

我创建了一个Windows表单项目,目标是.NET 4.5

enter image description here

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

enter image description here

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

enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

  1. 配置文件(.config
  2. 已编译的版本
  3. 已安装最新版本
  4. 默认情况下,如果在Visual Studio中设置目标框架,则会在.config旁边部署.exe文件。在此.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框架都使用CLR 4.0。
    只有sku(库存单位)指定应用程序支持的.NET Framework的确切版本。

    根据this article,只有从.NET Framework 4.0开始才能识别sku属性(包含版本号)。

    作为旁注:.NET 3.5也使用了sku,但仅用于指定您支持不存在的.NET Framework Client Profilesku="client")自.NET 4.5以来的任何时间。

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

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