.NET

.NET（3.1版以前称作.NET Core）是微软开发的第一个跨平台 （Windows、macOS和Linux）的应用程式开发框架（Application Framework），未来也将会支援FreeBSD与Alpine平台。.Net也是微软在一开始发展时就开源的软体平台，它经常也会拿来和现有的开源 .NET平台Mono比较。
.NET包含 .NET Framework的类别库，但与 .NET Framework不同的是 .NET采用套件化（Packages）的管理方式，应用程式只需要取得需要的组件即可，与 .NET Framework大包式安装的作法截然不同，同时各套件亦有独立的版本线（Version line），不再硬性要求应用程式跟随主线版本。
.NET专案的主要目标有 ：
# 支援或可以移转（port）到更多的作业系统平台与晶片架构（也就是未来计划会跨出x86平台）。
# 具有引人注目的效能与高可靠度。
# 开发人员能快速与直觉的获取 .NET开发环境。
# 在直觉与具生产力的情况下建造应用程式、使用文件、范例与NuGet元件。

**历史**
.NET Core 1.0于2016年6月27日发布。
2020年11月，微软发布了 .NET 5.0，统一了.NET的各个平台的碎片版本： .NET Framework 4.8、.NET Standard、.NET Core 3.1、Mono和Xamarin等。
2021年11月，微软发布了 .NET 6.0。
2022年11月，微软发布了 .NET 7.0。

**核心功能**
.NET是由许多专案所组成，除了基本的类别库（Core FX）之外，也包含采用RyuJIT编译的执行平台Core CLR、编译器平台.NET Compiler Platform、采用AOT编译技术运行最佳化的套件Core RT（.NET Core Runtime），以及跨平台的MSIL编译器LLILC（LLVM-based MSIL Compiler）等专案。
同时，微软也发展了一个建置技术文件的平台docfx ，并运用于 .NET的文件网站。

**RyuJIT**
RyuJIT是微软发展的新式即地编译器（Just-in-Time Compiler），用以取代现有的 .NET Framework的JIT以及JIT64即地编译器，依据微软公布的测试报告，RyuJIT的效能较前一代的JIT提升约25%，并支援SIMD（Single Instruction, Multiple Data）的技术。RyuJIT同时应用于 .NET Framework 4.6以及 .NET Core。

**Core CLR**
Core CLR移植 .NET Framework的CLR的功能，包含核心程式库mscorlib、JIT编译器、垃圾收集器（GC）以及其他执行MSIL所需要的执行期环境。

**Core RT**
Core RT是以预先编译为主的核心功能，在 .NET Core内称为Core RT，在UWP则是称为 .NET Native。
Core RT会在建造时期（非执行期）在编译时将MSIL转换成平台原生的机器码，以获取较短的启动时间（JIT采用的是执行时期编译，使得启动时间拉长），以及记忆体用量减少的优点。Core RT会在不同的平台使用不同的AOT技术：- Windows上使用的是 .NET Native。- macOS与Linux上使用的是LLILC（同时支援JIT和AOT）。

**LLILC**
LLILC（LLVM-based MSIL Compiler，英文发音为 "lilac"）是 .NET在非Windows平台的MSIL编译器，基于ECMA-335（Common Language Infrastructure）的标准将MSIL编译成原生码执行，适用于可运行LLVM的作业系统，例如macOS与Linux作业系统。
LLILC同时支援JIT（内含RyuJIT的实作） 以及AOT（未来将开始支援）的编译方式。

**Roslyn**
.NET Compiler Platform（专案代码为Roslyn）是将 .NET平台的编译架构标准化的平台，它可提供程式管理工具 （如整合开发环境） 相当多的情报，用以发展有助于编写程式与管理程式结构所需要的功能，例如型别资讯、语法结构、参考连结、语意、编译器、自动化、错误回报等等功能，只要是遵循CLI标准的程式语言，都可以利用 .NET Compiler Platform实作出编译器，让程式管理工具能实作如语法提示、语法自动完成、关键字高亮等视觉化能力。
.NET Compiler Platform可同时支援 .NET Framework 4.6以上版本，.NET Core也原生支援。

**套件管理**

**.NET Core v1.0时期**
.NET Core的类别库采用NuGet套件化的架构，应用程式只需要使用project.json的dependencies区段加入指定套件版本的参考，就能获得该套件的功能，与以往 .NET Framework大包式的提供方法完全不同。.NET Core团队宣布已经有98%的 .NET Framework主要类别库移转到 .NET Core平台。
例如下列project.json内容，可直接加入 .NET Standard Library（v1.0.0-rc2-23901）的参考。
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23901"
},
"frameworks": {
"netstandardapp1.5": {
"imports": "dnxcore50"
}
}
}
.NET Standard Library是一个总括型的NuGet Package，其内包含了这些类别库套件：- Microsoft.DotNet.CoreHost- NETStandard.Platform- System.Collections.Concurrent- System.Linq- System.Runtime.Numerics- System.Text.RegularExpressions
其中的NETStandard.Platform也是一个总括型套件，包含了下列类别库套件：- Microsoft.NETCore.Platforms- Microsoft.NETCore.Runtime- Microsoft.Win32.Primitives- System.AppContext- System.Collections- System.Diagnostics.Debug- System.Diagnostics.Tools- System.Diagnostics.Tracing- System.Globalization- System.Globalization.Calendars- System.IO- System.IO.FileSystem- System.IO.FileSystem.Primitives- System.Net.Primitives- System.Net.Sockets- System.Reflection- System.Reflection.Extensions- System.Reflection.Primitives- System.Reflection.TypeExtensions- System.Runtime- System.Runtime.Extensions- System.Runtime.Handles- System.Runtime.InteropServices- System.Runtime.InteropServices.RuntimeInformation- System.Text.Encoding- System.Text.Encoding.Extensions- System.Threading- System.Threading.Tasks- System.Threading.Timer
开发人员只需要使用NETStandard.Library就能加入所有必要的 .NET Core类别库参考，但若不需要这么多组件，也可以只加入特定的套件即可，不一定都要加入NETStandard.Library。

**.NET Core v1.1时期**
对于微软来说，.NET Core 1.0（以及早期开发时）使用project.json来处理套件管理与版本相依的问题，是因为很多工具还没赶上（例如微软主力的建置工具MSBuild），再加上project.json/xproj架构并不相容于以MSBuild为主的工具链 （Toolchain），若是要修改成相容 project.json/xproj 架构的话可能会付出极大成本，因此在 .NET Core 1.0 RC2 发布不久，官方就宣布要将project.json/xproj系统移回到以MSBuild为主的csproj ，例如下列csproj的例子即可看到套件参考的内容。

netcoreapp1.1


$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;


aspnet-MyCoolWebApplication-e119bc96-38e9-44ab-b4d3-d54964ade9b1
..\docker-compose.dcproj























由于 .NET Core移回了MSBuild架构，因此在Visual Studio 2017的 .NET Core工具内，已恢复可直接于IDE的GUI介面中编修套件参考的功能。

**应用程式类型**
.NET基于跨平台能力，在 .NET Core 3.0之前，并没有将与GUI高度相关的API移植到 .NET Core内，因此像是Windows Forms或是Windows Presentation Foundation（WPF）并未移植到 .NET Core。.NET支援主控台应用程式（Console Application）以及类别库（Class Library）类型的专案。
不过从 .NET Core 3开始，微软在其Universal Windows Platform（UWP）开发平台使用了 .NET，并且利用 .NET Native技术将其效能提升至十分接近原生码的速度。
ASP.NET Core则以主控台应用程式驱动其代管环境Kestrel Server以支援ASP.NET Core程式的执行。

**.NET CLI**
.NET CLI（Command-Line Interface）指令列工具是 .NET处理建造、执行与编辑工作的主要工具 ，有几个主要的动作：

**与其他平台的关系**
.NET经常会拿来与其他平台做比较，尤其是它的源头 .NET Framework以及另一个相似性质的开源平台Mono。

**.NET Framework**
据微软的说明，.NET Core和 .NET Framework是子集（Subset）与超集（Superset）的关系，.NET Core将会实作出部份的 .NET Framework功能 （基本上是不含使用者介面的部份），例如 JIT（.NET Core采用 RyuJIT）、垃圾收集器（GC）以及型别（包含基本型别以及泛型型别等）。.NET Framework与 .NET Core已经在 .NET 5及以后版本合并为统一的 .NET平台。

**Mono**
Mono是另一个已发展许久的 .NET Framework跨平台开源版本，起初由社群主导，并由Xamarin等技术推动了.NET跨平台应用的开发。在.NET Core问世后，微软逐步将跨平台的核心功能和支持纳入微软官方的.NET生态中，最终在.NET5及以后版本将.NET Core和Mono合并至统一的.NET平台。此后不再区分.NET Framework、.NET Core和Mono。
Mono的最后一个大版本于2024年2月发布，之后微软将其移交至Wine进行管理。
然而，Mono仍然具有其特定的用途，例如作为Unity游戏引擎和Xamarin。Android/Xamarin.iOS的运行环境，因为其提供的轻量级JIT编译和AOT（Ahead Of Time）功能。

**与ASP.NET Core的关系**
.NET Core与ASP.NET Core的关系其实一开始并不是主从关系 ，ASP.NET Core的开发初期（ASP.NET 5）.NET Core还没有开始起跑，因此ASP.NET Core当时有自己的执行期与工具，一开始称为Project K，后来改为DNX（.NET Execution Environment），DNX本身就具有可独立运作的执行能力，不需要依赖 .NET Core执行，但是这样会变成 .NET Core和ASP.NET Core双头马车的现象，在 .NET Core逐渐成熟之后，微软也决定要将这两个各自独立发展的产品线整合在一起，DNX也将因改用 .NET Core执行期而终止开发，DNX的功能将由 .NET Core以及旗下的 .NET CLI接替提供，整合后的版本将在1.0 RC2时释出。

**支援作业系统**
.NET 9支援下列作业系统 ：