.Net Framework 4.x 顺序到底运转在哪个 CL凯雷德 版本之上(ZT)

正文转发  https://walterlv.github.io/dotnet/2017/09/22/dotnet-version.html ,感激  吕毅
(包蕴链接: https://walterlv.github.io )

当我们编写翻译程序目的框架选为 .Net Framework 4.5/4.6/4.7 时,CLSportage运转时是何许判断大家毕竟应当用哪2个 .Net Framework 呢?.Net Framework
的版本到底由什么部分构成?大家编写翻译 .Net Framework
时选用的本子决定了什么样?


让笔者对这几个题材发生兴趣的由来是:

  • 自家将顺序编写翻译的靶子框架选为 .Net Framework 4.7;在一台设置了 .Net
    Framework 4.6 的计算机上提示缺少 .Net Framework
    4.7;删除了随编写翻译一起生成的 app.config 文件后先后能够健康运作。
  • 另三个主次,小编了然将顺序编写翻译的目的框架选为 .Net Framework
    4.5,但在一台没有设置任何附加 .Net Framework 的 Windows 7
    的处理器上提示贫乏的是 .Net Framework 4.0。

此间的问号在于为啥以上二种恍若类似的境况,提醒的框架版本却今非昔比。当中的 app.config 文件成为了考察此难题的突破口。

布局支持的运营时

观测程序附带的 app.config 文件,我们发现补助的运营时版本是 v4.0,sku
版本是 4.7。

<configuration>  
   <startup>  
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />  
   </startup>  
</configuration>  

疑点:

  1. 何以大家依据 .Net Framework 4.7 开发的程序运营时版本是 4.0?
  2. sku 是什么?

微软的法定文书档案给了我们解答:supportedRuntime
Element

  • version:用于钦点此应用程序协助的国有语言运营时(CLOdyssey)的本子。
  • sku:stock-keeping
    unit(官方中文为“仓库储存单位”,不过还是不懂这几个词的意味),用于钦点此应用程序帮衬的
    .Net Framework 发行版本。

version 的值可取:

.NET Framework 版本 version 值
忽略早期版本 忽略早期版本
2.0 “v2.0.50727”
3.0 “v2.0.50727”
3.5 “v2.0.50727”
3.5 “v2.0.50727”
4.0-4.7 “v4.0”

sku 的值可取:

.NET Framework version sku 值
4.0 “.NETFramework,Version=v4.0”
忽略中间版本 忽略中间版本
4.5 “.NETFramework,Version=v4.5”
4.5.1 “.NETFramework,Version=v4.5.1”
4.5.2 “.NETFramework,Version=v4.5.2”
4.6 “.NETFramework,Version=v4.6”
4.6.1 “.NETFramework,Version=v4.6.1”
4.6.2 “.NETFramework,Version=v4.6.2”
4.7 “.NETFramework,Version=v4.7”

于是乎我们发现,其实无论大家将顺序的目的框架选为 .Net Framework 的哪一个4.x 版本,CL奥德赛 运维时都以用 v4.0 表示的。微软的描述是:

对此支持 .NET Framework 4.0 或更高版本的应用程序,version 属性提醒 CLOdyssey版本,那是 .NET Framework 4 及更高版本的通用版本,而 sku
属性提示应用程序所指向的单个 .NET Framework 版本。

实在看来那里大家就能有2个接近天经地义的诠释:

  1. 不论大家挑选的指标框架是 .Net Framework 4.x 的哪八个本子,用于钦赐CL大切诺基 运维时版本的 version 值都是 v4.0;
  2. CLCRUISER运转时会依照安顿文件的 sku 值决定应该利用那一组运营库来为程序运维提供扶助。

.Net Framework 的组合以及各部分的本子

咱俩须要摸索到 .Net Framework
的面目,不然这么复杂的版本号系统真把自家搞懵了。

微软在 .NET Framework Versions and
Dependencies
 中说到:

每种版本的 .NET framework 都含有公共语言运营时
(CLLX570)、基础库和其它托管库。

于是乎咱们谈论 .Net Framework 的版本其实应该分五个例外的一部分来谈:

各类新本子的 .NET Framework 都会保留早期版本中的功用并会添加新职能。
CLCR-V 有其和谐的本子号标识。 固然 CL奥迪Q5 版本并不总是递增的,但 .NET
Framework 版本号在每趟发布时都会递增。 例如,.NET Framework 肆 、4.5
和更高版本包罗 CL瑞虎 4,而 .NET Framework 2.0、3.0 和 3.5 包蕴 CLPAJERO 2.0。
(没有版本 3 的 CLPAJERO。)

从官方文书档案给出的报表当中大家得以确信:.Net Framework 4.0/4.5/4.6/4.7
包蕴的 CL卡宴 版本都以 4.0。

CLR 的更新

但是,不信赖微软的 CLPRADO 可以完全没有 BUG,既然 CL汉兰达 版本都以4.0,那么微软对 CLCR-V 运维时的换代怎么处理?安装了 .Net Framework
4.5/4.6/4.7 会如何进步 CL奥德赛 的平安和安全性?

在 Targeting and Running .NET Framework apps for version 4.5 and
later
 中,解释了
CLOdyssey 的翻新机制——就地更新(in-place update)。那篇文章 .NET 4.5 is an
in-place replacement for .NET
4.0
 对那种就地更新格局有比官方文书档案更详实的诠释,并且还捎带自个儿的一部分考试(含代码)。不过著作是
二〇一一 年写的,部分结论今后看来已经不合时宜(因为在笔者的 Windows 10 配 .Net
Framework 4.7
上敲定已经不雷同),可是对本人明白就地更新自个儿12分有援助,也为继承考察提供了更清楚的思绪。

微软对 .Net Framework 4.x 框架就地更新的证实是:

.NET Framework 4.5 是顶替总括机上的 .NET Framework 4
的当庭更新,同样,.NET Framework 4.5.1 4.5.贰 、4.⑥ 、4.6.壹 、4.6.2 和 4.7
是对 .NET Framework 4.5
的当庭更新,那表示它们将动用相同的运作时版本,可是程序集版本会更新并包含新品类和成员。
在设置当中某些更新后,你的 .NET Framework 4.NET Framework 4.5 或 .NET
Framework 4.6 应用应继续运转,而无需另行编写翻译。 可是,反过来则尤其。

也等于说,无论大家在开发时钦定指标框架的本子是 4.x
的哪三个,在运行时,CL大切诺基 环境都以 4.0。然则新的 .Net Framework
会带来更新版本的 CLPAJERO,这几个 CLGL450 会直接调换掉旧的 CLENVISION。.NET 4.5 is an
in-place replacement for .NET
4.0
 小说中
.Net Framework 基础库也是就地更新的;但自个儿骨子里试验的图景是每3个例外的
.Net Framework 基础库有协调独自的文件夹,最近尚不清楚这些改变是从 .Net
Framework 的哪一个版本开端的,但一定是 4.5.一 、4.5.贰 、4.6
那八个本子中的三个。

图片 1

缓解一上马的疑问

于是乎,本文一初叶的疑团就整个明显了:

  1. 无论是 .Net Framework 4.5 的还是 4.7 的那四个程序,都以靠 4.0
    版本的公物语言运营时(CL卡宴)运转起来的;
  2. 假如没有设置 4.0 版本的 CL汉兰达,则会弹出提醒供给安装 .Net Framework 4.0
    版本才能运行,而无论是我们的主次指标框架是 .Net Framework 4.x
    的哪3个版本;

    • 即使说文案说的是 .Net Framework,但实则须要的是 CLENVISION
  3. 一旦已经设置有 4.0 版本的 CL汉兰达(大概随 .Net Framework 4.5/4.6
    安装),大家先后的靶子框架是 .Net Framework 4.7,但 .Net Framework
    基础库并没有设置 4.7 版本,则运维时会提醒须要安装 .Net Framework
    4.7;

    • 其一提醒是 4.0 版的 CLRubicon弹出的,是依照 supportedRuntime 中钦点的 sku 值来决定的

参考资料


本文少禽常常更新,请阅读原版的书文: https://walterlv.github.io/dotnet/2017/09/22/dotnet-version.html ,防止止陈旧错误知识的误导,同时有更好的读书体验。