.Net Framework 4.x 程序到底运行在哪个 CLR 版本之上

本文探讨了.Net Framework 4.x程序在不同版本的CLR上运行的情况。即使目标框架是4.5/4.6/4.7,程序仍然依赖v4.0的CLR运行时。CLR通过就地更新机制在新版本中提供稳定性和安全性提升。.Net Framework的基础库随着版本更新,但CLR版本始终保持为4.0。当缺少相应版本的框架时,会提示安装错误的版本,这是因为CLR根据app.config中sku属性判断所需框架版本。
摘要由CSDN通过智能技术生成

当我们编译程序目标框架选为 .Net Framework 4.5/4.6/4.7 时,CLR 运行时是如何判断我们究竟应该用哪一个 .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?
1. sku 是什么?

微软的官方文档给了我们解答:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值