.NET平台框架解读

2023-11-07

概述

微软在.NET跨平台之路上付出了巨大的艰辛,同时做了海量的工作。

首先推出了统一的API标准规范库 .NET Standard,并不断补充完善标准库,截止目前(2023-6-30)最新版本为 .NET Standard 2.1。

2016年发布了.NET Core 1.0.0,开放了源代码位于.NET基金会下面,并大力发展生态建设,世界知名IT公司纷纷加入并贡献,社区发展异常活跃。收购Xamarin公司后,Mono也正式加入了微软大家庭,填补了微软技术栈在移动APP开发领域的技术空白。

自此微软.NET进化成了如下图所示的全新的大架构。

.NET Framework

1、.Net Framework 是Net的一种实现,在此类库上我们可以使用C#,VB,F#进行程序编写,主要用于构建Windows下的应用程序,其主要由两部分组成:

  • 公共语言运行时(CLR)处理应用程序 
  • 基础类库(BCL)这是可重用的代码库,使用其进行应用程序编写

2、在执行的过程中.Net编写的代码将会被编译成一种称为中间语言(IL)存储形式以DLL和EXE后缀名结尾的文件为主,当程序运行时CLR会编译转换为机器代码。

3、 .Net Framework本身不是跨平台的,仅限于运行在Windows 平台,想要跨平台需要借助第三方。

应用场景:针对传统的桌面端解决方案,采用WPF与WinForm。

.NET Core

早期(.NET Core之前)的.NET应用程序是不跨平台,它只能运行在Windows操作系统上,并且操作系统中还必须安装.NET Framework环境。如果要运行在其他操作系统上,需要借助第三方的框架,比如:Mono—一个开源的第三方.NET Framework框架,它可以运行在Linux和Mac OS操作系统上。

2011年5月,Mono开发者为了使用C#开发跨平台的移动设备应用,成立并发布了Xamarin后于2016年被微软收购,但这只是微软跨平台的第一步,毕竟Xamarin只适合开发移动端应用。

随着移动设备迅速占领市场,Windows平台的大势已去。直到.NET Core,.NET才算真正的跨平台,这也是微软重大的战略转变。2014年12月,微软拥抱开源社区,宣布开源了.NET Core的核心代码,也是.NET跨平台迈出的最重要的一步。

经过不断地迭代,2016年6月发布和.NET Core 1.0,2017年3月发布.NET Core1.1.1。目前(2023.06.30).Net最新版本是.Net8.0预览版。

.NET Core是一种模块化实现,可用于各种垂直领域,从数据中心扩展到基于触摸的设备,它是开源的,跨平台的,能在Windows、Linux、MacOS等操作系统上运行,同时还支持Docker等容器化环境安装和部署。 

微软负责.NET的项目经理 Scott Hunter认为:“.NET Core客户中有40%是全新的平台开发人员这正是我们想要的结果。我们想引入新人。”

.NET Core的运行速度很快,因为它可以与应用程序并行部署,所以.NET Core可以频繁地更改,因为这些更改不会影响同一台计算机上的其他 .NET Core 应用程序。微软对 .NET Core 所做的改进无法添加到NET Framework中。 

应用场景:针对跨平台(Windows、Linux、macOS)的解决方案,如物联网IoT、人工智能AI、AR、MR、Web等。

.Net Standard

Net Standard 是一个规范,它定义了.Net Framework和.Net Core必须实现的Api,它的出现为各种平台上开发的。.Net人员解决了代码共享问题,但是仅用于开发类库,意思就是说如果你的类库是.Net Standard规范的,那么此类库既可以是.Net Framework也可以是.Net Core类库。

Xamarin

第三方公司开发了名为 Mono 项目的 .NET Framework实现。Mono是跨平台的,但是它远远落后于.NET Framework的官方实现。Mono 作为 Xamarin移动平台以及 Unity 等跨平台游戏开发平台的基础,已经找到了自己的价值。

微软在2016年收购了 Xamarin,并且在 Visual Studio2019中免费提供曾经昂贵的 Xamarin扩展。微软将只能创建移动应用程序的 Xamarin Studio开发工具更名为 Visual Studio2019 for Mac,并赋予它创建其他类型应用程序的能力。有了 Visual Studio2019 for Mac,微软就能够将 Xamarin Studio编辑器的部分功能替换为 Visual Studio2019 for Windows的部分功能,以提供更接近的体验和性能。

应用场景:针对移动端的解决方案,如IOS、Android和WinPhone等。 

开发工具

Visual Studio 微软官方推出的宇宙第一IDE,它是一个完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等。目前(2023-06-30)最新版本是Visual Studio 2022。

其他开发工具有Visual Studio for Mac 和 Visual Studio Code。

总结(AI)

.Net平台是一个非常成熟、稳定和高效的开发平台,它可以帮助开发者快速、灵活地构建各种应用程序。.Net平台结合了C#、VB和F#等语言,提供了强大的开发工具和框架,可以轻松地应对各种开发需求。

同时,.Net平台拥有非常丰富的扩展性和可移植性,可以在多种不同的环境中运行,包括Windows、Linux和macOS等操作系统。此外,.Net平台全面支持云端开发,可以轻松地创建和管理云平台应用程序。

总的来说,.Net平台是一个非常优秀的开发平台,适合各种类型的应用程序的开发,我非常推荐它。

参考文献:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET平台框架解读 的相关文章

  • 有没有办法禁用 .NET 标签的“双击复制”功能?

    这真的很烦人 我使用标签作为列表项用户控件的一部分 用户可以单击它来选择列表项 然后双击它来重命名它 但是 如果剪贴板中有名称 双击标签会将其替换为标签文本 我还检查了应用程序中的其他标签 双击它们也会将其复制到剪贴板 我没有在这个程序中编
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • 页面中某些超链接控件上的本地化资源未发生变化

    上面是正在开发中的网站的屏幕截图 我们有一个 DropdownList 控件 并在其 SelectedIndexChanged 上进行回发 然后我们更改站点区域性 然后加载相应的资源文件 DropDownList ASP NET 代码
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 在 C# 中的同一套接字上发送+接收数据

    我试图使用套接字 System Net Socket 甚至尝试过 TcpListener Client Etc 来在等待或已经发送数据时侦听数据 我做了以下事情 public byte bytesIn public byte bytesOu
  • Windows DPAPI - 如何处理熵?

    我正在使用 Windows DPAPI 来加密一些敏感数据 密码存储在注册表中 这一切都运行良好 但我想知道是否有人可以澄清我对 NET 中 可选 提供给 ProtectedData Protect 的 熵 字节的理解 熵 字节数组似乎类似
  • 使用实体框架从 2 个表返回数据

    我正在使用 MVC3 和实体框架 但我需要来自不同表的更多数据 通常我会做这样的事情来从表中获取数据 Table Users id username 在代码中我会做这样的事情来获取所有用户 public static IEnumerable
  • 何时使用 Windows Workflow Foundation? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些事情仅通过手动 代码 更容易实现 但有些事情通过 WF 更容易实现 看起来 WF 可以用来创建 几乎 任何类型的算法 所以 理论上 我可以在
  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 我的 .NET 库列表中缺少 System.Windows.Data

    您好 我想使用 System Windows Data IValueConverter 但是当我尝试在 VS2010 中添加对 System Windows Data 的引用时 我只看到 System Windows Forms 和 Sys
  • 如何使用 .Net Core 和 VSCode 在调试模式下执行测试?

    如何使用 Net Core 和 VSCode 在调试模式下执行测试 我当前正在命令行上运行以下命令 dotnet Test 但是 这不是在调试模式下执行测试 我要附加调试器吗 如果是这样 怎么办 如有必要 请将测试项目转换为控制台应用程序
  • .NET 标准与 .NET 核心

    我已经了解了 NET Standard 和 NET Core 之间的区别 但我真的不知道区别是什么 或者何时选择 NET Standard 库项目以及何时选择 NET Core 库项目 我读到 NET Standard 是为了确保一组 AP
  • 如何将 Razor 视图转换为字符串?

    我想使用我的 Razor 视图作为某种发送电子邮件的模板 所以我想将我的模板 保存 在视图中 将其作为字符串读入控制器 进行一些必要的替换 然后发送它 我有有效的解决方案 我的模板作为 HTML 页面托管在某处 但我想将其放入我的应用程序中
  • 限制 LDAP 查询中返回的属性

    如何限制通过 System DirectoryServices 在 LDAP 查询中返回的属性 我一直在使用 DirectorySearcher 并将我想要的属性添加到 DirectorySearcher PropertiesToLoad
  • 如何判断应用程序是否是Web应用程序

    在 Windows 服务和 Web 应用程序中运行的核心程序集中 我需要存储每个用户会话的信息 该服务将具有单个用户会话 并且 Web 应用程序使用 HttpContext Current 我想配置在核心程序集中使用哪种方法 约定优于配置
  • 合并两个(或更多)PDF

    背景 我需要为我的销售人员提供每周报告包 该包包含几个 5 10 个水晶报告 Problem 我想允许用户运行所有报告并且只运行单个报告 我想我可以通过创建报告然后执行以下操作来做到这一点 List
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 什么会阻止 Docker 容器中运行的代码连接到单独服务器上的数据库?

    我有一个在 Ubuntu 14 04 上的 Docker 容器中运行的 NET Core 1 1 应用程序 它无法连接到在单独服务器上运行的 SQL Server 数据库 错误是 未处理的异常 System Data SqlClient S

随机推荐

  • 微软五笔调用

    微软五笔调用 点击已安装语言包 选项 添加键盘 微软五笔
  • Python中logging:设置打印级别,打印格式,打印颜色

    目录 前言 一 引入库 二 实现代码 三 运行结果 四 补充知识 logging模块的日志级别 前言 控制log的打印级别 打印格式 控制台根据log级别打印不同的颜色 一 引入库 import logging import colorlo
  • 一步一步学android控件(之六) —— MultiAutoCompleteTextView

    今天学习的控件是MultiAutoCompleteTextView 提到MultiAutoCompleteTextView 我们就自然而然地想到AutoCompleteTextView 就想知道他们之间到底有什么区别 在讲他们区别之前呢先来
  • 产品经理面经

    相信很多产品经理在跳槽面试的时候 在面试尾声都会遇到这样的环节 面试官会问你有什么问题要问的 一般来说大家都能随时随地甩出几个问题来化解 但其实在这个环节对于应聘者来说也是一个很好的机会来展现自己的能力 甚至还能借此环节来挽回前面表现不佳的
  • 年轻人存款之难与突破

    导语 近日 有关年轻人存款的调查数据引发了广泛讨论 称大约五分之一的年轻人存款在一万元以内 存款超过10万元似乎成为一个 坎 只有不到半数的人能够跨越这一难关 在这个话题引发热议的背景下 让我们来探讨年轻人存款难的原因以及如何突破这个困境
  • 多线程-Thread类的常用方法及使用场景

    众所周知 操作线程就必须熟读线程的API方法 万一你开个多线程刹不住车就歇菜了 下面就介绍一些API基本用法 包括sleep join yield interrupt sleep 让当前线程睡一会 原生用法Thread sleep 毫秒 会
  • VS2022+Qt5.14.2成功编译MITK2022.10

    目录 一 编译结果 二 编译问题解决 三 两个注意事项 3 1 patch文件格式从 LF 修改为 CRLF 3 2 ITK gitclone lastrun文件必须有 四 参考链接 一 编译结果 二 编译问题解决 error C2220错
  • Flashswap 学习笔记(附代码)

    什么是Flashswap 利用交易的原子性 可以在这样的同一笔交易中调用智能合约 同时完成借和还 参考下图 Flashswap流程 代码 流程 代码 SPDX License Identifier GPL 3 0 pragma solidi
  • 华为云云服务器评测|详解 Nacos 安装部署

    环境配置 服务器 云耀云服务器L 操作系统 CentOS 7 9 64bit 公共镜像 JDK 64 bit JDK 1 8 Maven Maven 3 2 x nacos server 2 2 3 下载地址 官方github Releas
  • vue中的reactive方法

    在Vue中 有一个名为reactive的方法用于创建响应式对象 reactive方法接受一个普通的JavaScript对象 并将其转化为一个响应式对象 使其属性能够自动追踪依赖并响应数据变化 要使用reactive方法 首先需要在Vue文件
  • keil swd设置下载stm32f103c8t6.

    1 debug选项 选择jlink 2 utilities选择jlink3 加载flash算法 4 选择swd模式 其他基本上默认 这样就可以下载了对rom和ram设置需要说明一下 1 IROM1 前面是首地址 后面是大小 表示FLASH
  • 华为OD机试 - 内存资源分配Ⅱ(JS)

    题目描述 有一个简易内存池 内存按照大小粒度分类 每个粒度有若干个可用内存资源 用户会进行一系列内存申请 需要按需分配内存池中的资源返回申请结果成功失败列表 分配规则如下 分配的内存要大于等于内存的申请量 存在满足需求的内存就必须分配 优先
  • CTF解题技能之图片分析(二)

    丹丹上次介绍过CTF图片分析的附加式图片隐写和基于文件结构的图片隐写两种图片隐写方式 今天继续和大家分享图片隐写术 今天分享的内容主要是基于LSB原理的图片隐写 原理介绍 LSB LeastSignificant Bits 算法 将秘密信息
  • VS Code 问题:launch:program‘...\.vscode\launch.exe‘ dose not exist

    VS Code 问题 launch program vscode launch exe dose not exist 问题描述 解决过程 参考内容 问题描述 按照博客大佬们的指导 给 VS Code 配置 C 语言环境 参考推荐 菜得扣 的
  • 时间复杂度和空间复杂度计算

    之前一直对于时间复杂度 O 1 O n O n 3 等弄不清楚是如何计算的 所以学习一番在此分享 背景 算法是指用来操作数据 解决程序问题的一组方法 对于同一个问题 使用不同的算法 也许最终得到的结果是一样的 但在过程中消耗的资源和时间却会
  • css实现border渐变样式

    项目中用到了border的渐变使用 虽然可以使用图片 但不如代码实现效果好 所以实现了border两头渐变的效果 效果如图 text desc width 24 height 100 box sizing border box 必须设置bo
  • BBR算法

    BBR算法 简述 bbr算法为google在2016年提出 用于改善tcp的性能 提升稳定性 降低延迟 更好地应对网络损伤 在整个算法调节周期中 bbr算法都在尽力维持最大bw和最小rtt 对比传统的tcp算法 传统算法不能区分是拥塞导致的
  • Qt命令行的使用

    以前使用命令行指定参数启动Qt程序都是用argc和argv 有时用Build环境设置 现在才知道原来Qt从5 2就有了两个类 QCommandLineParser 和 QCommandLineOption 专门用于命令行启动 它们属于Cor
  • 主机漏洞利用演示MS17-010(永恒之蓝)

    ms17 010危害 对被攻击方的电脑造成蓝屏 申明 本篇文章的用意仅做学习使用 网络搭建环境 软件 Vmware Workstation 17 攻击机 Kali 靶机环境 Windows 7 Nmap软件的基本功能 1 主机发现 Host
  • .NET平台框架解读

    概述 微软在 NET跨平台之路上付出了巨大的艰辛 同时做了海量的工作 首先推出了统一的API标准规范库 NET Standard 并不断补充完善标准库 截止目前 2023 6 30 最新版本为 NET Standard 2 1 2016年发