dotnet 获取用户设备安装了哪些 .NET Framework 框架

从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息

在注册表的当前设备的 SOFTWARE\Microsoft\NET Framework Setup\NDP\ 可以拿到在设备安装的 .NET Framework 版本

大概从注册表拿到的数据就是这样

v2.0.50727=.NET Framework 2.0 SP2; v3.0=.NET Framework 3.0 SP2; v3.5=.NET Framework 3.5 SP1; v4 Client=.NET Framework 4.5 Client Profile; v4 Full=.NET Framework 4.5; 

本文主要告诉大家如何从上面的字符串解析出用户安装了哪些 .NET Framework 版本

各个版本的 .NET Framework 依赖的系统请看.NET Framework Versions and Dependencies

    public class UserNetFramework
    {
        /// <summary>
        /// .NET Framework 2.0 SP2
        /// </summary>
        public bool InstalledNETFramework20SP2 => _list.Contains(NETFramework20SP2);

        private const string NETFramework20SP2 = ".NET Framework 2.0 SP2";

        /// <summary>
        /// .NET Framework 3.0 SP2
        /// </summary>
        public bool InstalledNETFramework30SP2 => _list.Contains(NETFramework30SP2);

        private const string NETFramework30SP2 = ".NET Framework 3.0 SP2";

        /// <summary>
        /// .NET Framework 3.5 SP1
        /// </summary>
        public bool InstalledNETFramework35SP1 => _list.Contains(NETFramework35SP1);

        private const string NETFramework35SP1 = ".NET Framework 3.5 SP1";

        /// <summary>
        /// .NET Framework 4 Client Profile
        /// </summary>
        public bool InstalledNETFramework4CP => _list.Contains(NETFramework4CP);

        private const string NETFramework4CP = ".NET Framework 4 Client Profile";


        /// <summary>
        /// .NET Framework 4 Full
        /// </summary>
        public bool InstalledNETFramework4F => _list.Contains(NETFramework4F);

        private const string NETFramework4F = ".NET Framework 4 Full";

        /// <summary>
        /// .NET Framework 4.5 Client Profile
        /// </summary>
        public bool InstalledNETFramework45CP => _list.Contains(NETFramework45CP);

        private const string NETFramework45CP = ".NET Framework 4.5 Client Profile";

        /// <summary>
        /// .NET Framework 4.5
        /// </summary>
        public bool InstalledNETFramework45 => _list.Contains(NETFramework45);

        private const string NETFramework45 = ".NET Framework 4.5";

        /// <summary>
        /// .NET Framework 4.5.1
        /// </summary>
        public bool InstalledNETFramework451 => _list.Contains(NETFramework451);

        private const string NETFramework451 = ".NET Framework 4.5.1";

        /// <summary>
        /// .NET Framework 4.5.2
        /// </summary>
        public bool InstalledNETFramework452 => _list.Contains(NETFramework452);

        private const string NETFramework452 = ".NET Framework 4.5.2";

        /// <summary>
        /// .NET Framework 4.6
        /// </summary>
        public bool InstalledNETFramework46 => _list.Contains(NETFramework46);

        private const string NETFramework46 = ".NET Framework 4.6";

        /// <summary>
        /// .NET Framework 4.6.1
        /// </summary>
        public bool InstalledNETFramework461 => _list.Contains(NETFramework461);

        private const string NETFramework461 = ".NET Framework 4.6.1";

        /// <summary>
        /// .NET Framework 4.7 Client Profile
        /// </summary>
        public bool InstalledNETFramework47CP => _list.Contains(NETFramework47CP);

        private const string NETFramework47CP = ".NET Framework 4.7 Client Profile";

        /// <summary>
        /// .NET Framework 4.7
        /// </summary>
        public bool InstalledNETFramework47 => _list.Contains(NETFramework47);

        private const string NETFramework47 = ".NET Framework 4.7";

        private readonly HashSet<string> _list = new HashSet<string>();

        public static UserNetFramework Parser(string str)
        {
            var userNetFramework = new UserNetFramework();

            foreach (var temp in new[]
            {
                NETFramework47CP, 
                NETFramework47, 
                NETFramework461, 
                NETFramework46, 
                NETFramework452, 
                NETFramework451,
                NETFramework45CP,
                NETFramework45, 
                NETFramework4CP,
                NETFramework4F,
                NETFramework35SP1, 
                NETFramework30SP2,
                NETFramework20SP2,
            })
            {
                if (str.Contains(temp))
                {
                    str = str.Replace(temp, "");

                    userNetFramework._list.Add(temp);
                }
            }

            return userNetFramework;
        }
    }

.NET Framework Versions and Dependencies

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

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 .NET Framework 是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件。.NET Framework 旨在实现下列目标:   提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。   提供一个将软件部署和版本控制冲突最小化的代码执行环境。   提供一个可提高代码(括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。   提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。   使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。   按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。   .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework 类库。公共语言运行库是 .NET Framework 的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序括传统的命令行或图形用户界面 (GUI) 应用程序,也括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。   .NET Framework 可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。   .NET Framework是Microsoft为开发应用程序而创建的一个富有革命性的新平台。   这句话最有趣的地方是它的含糊不清,但这是有原因的。首先,注意这句话没有说“在Windows操作系统上开发应用程序”。尽管.NET Framework的Microsoft版本运行在Windows操作系统上,但以后将推出运行在其他操作系统上的版本,例如Mono,它是.NET Framework的开发源代码版本(含一个C#编译器),该版本可以运行在几个操作系统上,括各种Linux版本和Mac OS。许多这类项目正在开发,在读者阅读本书时可能就已发布了。另外,还可以在个人数字助手(PDA)类设备和一些智能电话上使用Microsoft .NET Compact Framework(基本上是完整 .NET Framework的一个子集)。使用.NET Framework的一个主要原因是它可以作为集成各种操作系统的方式。   另外,上面给出的.NET Framework定义并没有限制应用程序的类型。这是因为本来就没有限制。.NET Framework可以创建Windows应用程序、Web应用程序、Web服务和其他各种类型的应用程序。   .NET Framework的设计方式保证它可以用于各种语言,括本书要介绍的C#语言,以及C++、Visual Basic、JScript,甚至一些旧的语言,如COBOL。为此,还推出了这些语言的.NET版本,目前还在不断推出更多的.NET版本的语言。所有这些语言都可以访问.NET Framework,它们还可以彼此交互。C#开发人员可以使用Visual Basic程序员编写的代码,反之亦然。   所有这些提供了意想不到的多样性,这也是.NET Framework具有诱人前景的部分原因。.NET Framework的内容   .NET Framework主要含一个非常大的代码库,可以在客户语言(如C#)中通过面向对象编程技术(OOP)来使用这些代码。这个库分为不同的模块,这样就可以根据希望得到的结果来选择使用其中的各个部分。例如,一个模块含Windows应用程序的构件,另一个模块含联网的代码块,还有一个模块含Web开发的代码块。一些模块还分为更具体的子模块,例如在Web开发模块中,有用于建立Web服务的子模块。   其目的是,不同的操作系统可以根据自己的特性,支持其中的部分或全部模块。例如,PDA支持所有的核心.NET功能,但不需要某些更深奥的模块。   部分.NET Framework库定义了一些基本类型。类型是数据的一种表达方式,指定其中最基础的部分(例如32位带符号的整数),以便使用.NET Framework在各种语言之间进行交互操作。这称为通用类型系统(Common Type System,CTS)。   除了支持这个库以外,.NET Framework.NET公共语言运行库(Common Language Runtime,CLR),它负责管理用.NET库开发的所有应用程序的执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值