.NET

.NET（3.1版以前称作.NET Core）是微软开发的第一个跨平台 （Windows、macOS和Linux）的应用程序开发框架（Application Framework）。.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日发布。

.NET Core 2.0于2017年8月14日发布。

.NET Core 3.0于2019年9月23日发布。

2020年11月，微软发布了 .NET 5.0，统一了.NET的各个平台的碎片版本： .NET Framework 4.8、.NET Standard、.NET Core 3.1、Mono和Xamarin等。

此后，微软每年11月发布一个 .NET 的大版本更新，并将偶数大版本指定为长期支援（LTS）版本。

2021年11月，微软发布了 .NET 6.0，为LTS版本，提升了性能并完善了跨平台开发能力。

2022年11月，微软发布了 .NET 7.0，进一步提升性能和开发体验，增强了云原生和容器支持。

2023年11月，微软发布了 .NET 8.0，作为LTS版本，继续在性能、多平台和AI场景方面优化。

2024年11月，微软发布了 .NET 9.0，聚焦性能提升和云原生应用，并持续完善开发工具链。

2025年11月，微软发布了 .NET 10.0。

版本｜发布日期｜一同发布的产品｜最新补丁版本｜补丁发布日期｜终止支持｜支援周期

o｜Visual Studio 2015 Update 3｜1.0.16｜3 年

o｜Visual Studio 2017 版本 15.0｜1.1.13｜2.5 年

o｜Visual Studio 2017 版本 15.3｜2.0.9｜1.25 年

o｜Visual Studio 2017 版本 15.7｜2.1.30 （LTS）｜3.25 年

o｜Visual Studio 2019 版本 16.0｜2.2.8｜1 年

o｜Visual Studio 2019 版本 16.3｜3.0.3｜0.5 年

o｜Visual Studio 2019 版本 16.4｜3.1.32 （LTS）｜1 年

o｜Visual Studio 2019 版本 16.8｜5.0.17｜1.5 年

o｜Visual Studio 2022 版本 17.0｜6.0.36 （LTS）｜3 年

o｜Visual Studio 2022 版本 17.4｜7.0.20｜1.5 年

Visual Studio 2022 版本 17.8｜8.0.28 （LTS）｜3 年

Visual Studio 2022 版本 17.12｜9.0.17｜2 年

c｜Visual Studio 2026 版本 18.0｜10.0.9 （LTS）｜3 年

2026年11月（预估）

l

## 核心功能

.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（未来将开始支援）的编译方式。

因为RyuJIT的跨平台能力与性能逐渐追上，LLILC的Github仓库已于2022年被归档，不再维护

### 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）的参考。

```json
{
    "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的例子即可看到套件参考的内容。

```xml
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>

  <PropertyGroup>
    <UserSecretsId>aspnet-MyCoolWebApplication-e119bc96-38e9-44ab-b4d3-d54964ade9b1</UserSecretsId>
    <DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.1" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
  </ItemGroup>

</Project>
```

由于 .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处理建造、执行与编辑工作的主要工具，有几个主要的动作：

指令｜说明

dotnet new｜产生新的基本 .NET 专案内容 （包含 project.json、Program.cs 以及 NuGet.config）

dotnet restore｜还原所参考的 NuGet 套件

dotnet build｜建造 .NET 专案

dotnet publish｜产生可发行的 .NET 专案 （包含所属的 Runtime）

dotnet run｜编译与立即执行 .NET 专案 （较适用于 exe 型专案）

dotnet repl｜启动互动式的对话

dotnet pack｜将专案的产出封装成 NuGet 套件

## 与其他平台的关系

.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支援下列操作系统：

操作系统｜版本｜平台｜组态

Windows 10｜Version 1607+｜x64, x86, Arm64

Windows 11｜Version 2200+｜x64, x86, Arm64

Windows Server｜2012+｜x64, x86｜全功能版、Server Core

Windows Nano Server｜Version 2019+｜x64

Windows Server Core｜2012+｜x64,x86

Alpine Linux｜3.19+｜x64, Arm32, Arm64

CentOS｜9+｜x64, Arm64,ppc664le,s390x

Debian｜12+｜x64, Arm32, Arm64

Fedora｜40+｜x64, Arm32, Arm64

OpenSUSE｜15.5+｜x64

Red Hat Enterprise Linux｜8+｜x64, Arm64

SUSE Linux Enterprise｜12 SP2+｜x64, Arm64,ppc664le,s390x

Ubuntu｜18.04+｜x64, Arm32, Arm64

macOS｜13+｜x64, Arm64

iOS｜16.0+｜Arm64

tvOS｜12.2+｜Arm64

Android｜API 21+｜x64, Arm32, Arm64

## 基本资料

- 开发者：.NET基金会
- 发行日期：2016年6月27日
- 编程语言：C++、C#、F#和VB.NET
- 操作系统：Windows、Linux和macOS
- 类型：软件框架
- 许可协议：MIT许可证