.NET

![]() | 此条目需要更新。 (2020年12月10日) |
![]() | 此条目可参照英语维基百科相应条目来扩充。 (2021年8月16日) |
![]() | |
开发者 | .NET基金会 |
---|---|
首次发布 | 2016年6月27日 |
当前版本 | |
源代码库 | |
编程语言 | C++和C♯ |
操作系统 | Windows、Linux和macOS |
类型 | 软件框架 |
许可协议 | MIT许可证[4] |
网站 | dotnet |
.NET(3.1版以前称作.NET Core)是微软开发的第一个跨平台 (Windows、macOS和Linux)的应用程序开发框架(Application Framework),未来也将会支持FreeBSD与Alpine平台。.Net也是微软在一开始发展时就开源的软件平台[5],它经常也会拿来和现有的开源 .NET平台Mono比较。
.NET包含 .NET Framework的类别库,但与 .NET Framework不同的是 .NET采用包化(Packages)的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework大包式安装的作法截然不同,同时各包亦有独立的版本线(Version line),不再硬性要求应用程序跟随主线版本。
.NET项目的主要目标有 [6]:
- 支持或可以移转(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。
版本 | 发布日期 | 一同发布的产品 | 最新补丁版本 | 补丁发布日期 | 终止支持[7] |
---|---|---|---|---|---|
.NET Core 1.0 | 2016-06-27[8] | Visual Studio 2015 Update 3 | 1.0.16 | 2019年5月14日 | 2019年6月27日 |
.NET Core 1.1 | 2016-11-16[9] | Visual Studio 2017 Version 15.0 | 1.1.13 | 2019年5月14日 | 2019年6月27日 |
.NET Core 2.0 | 2017-08-14[10] | Visual Studio 2017 Version 15.3 | 2.0.9 | 2018年7月10日 | 2018年10月1日 |
.NET Core 2.1 | 2018-05-30[11] | Visual Studio 2017 Version 15.7 | 2.1.30 (LTS) | 2021年8月19日 | 2021年8月21日 |
.NET Core 2.2 | 2018-12-04[12] | Visual Studio 2019 Version 16.0 | 2.2.8 | 2019年11月19日 | 2019年12月23日 |
.NET Core 3.0 | 2019-09-23[13] | Visual Studio 2019 | 3.0.3 | 2020年2月18日 | 2020年3月3日 |
.NET Core 3.1 | 2019-12-03[14] | Visual Studio 2019 | 3.1.32 (LTS) | 2022年12月13日 | 2022年12月13日 |
.NET 5 | 2020-11-10[15] | Visual Studio 2019 Version 16.8 | 5.0.17 | 2022年5月10日 | 2022年5月10日 |
.NET 6 | 2021-11-08[16] | Visual Studio 2022 Version 17.0 | 6.0.36 | 2024年11月12日 | 2024年11月12日 |
.NET 7 | 2022-11-08[17] | Visual Studio 2022 Version 17.4 | 7.0.4 | 2024年5月28日 | 2024年5月14日 |
.NET 8 | 2023-11-14 | 不适用 | 8.0.4 (LTS) | 2024年11月5日 | 2026年11月10日 |
.NET 9 | 2024-11-12 | Visual Studio 2022 Version 17.12 | 9.0.1 | 2024年12月3日 | 2026年5月12日 |
旧版本 旧版本,仍被支持 当前版本 未来版本 |
核心功能
[编辑].NET是由许多项目所组成,除了基本的类别库(Core FX)之外,也包含采用RyuJIT编译的执行平台Core CLR、编译器平台.NET Compiler Platform、采用AOT编译技术运行优化的包Core RT(.NET Core Runtime),以及跨平台的MSIL编译器LLILC(LLVM-based MSIL Compiler)等项目。
同时,微软也发展了一个建置技术文件的平台docfx [18],并运用于 .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[19]。
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编译器[20],基于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平台[21]。
例如下列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 [22],例如下列csproj的例子即可看到包参考的内容。
<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。[23].NET支持控制台应用程序(Console Application)以及类别库(Class Library)类型的项目。
不过从 .NET Core 3开始,微软在其Universal Windows Platform(UWP)开发平台使用了 .NET[24],并且利用 .NET Native技术将其性能提升至十分接近原生码的速度。
ASP.NET Core则以控制台应用程序驱动其托管环境Kestrel Server以支持ASP.NET Core程序的执行。
.NET CLI
[编辑].NET CLI(Command-Line Interface)指令列工具是 .NET处理建造、执行与编辑工作的主要工具 [25],有几个主要的动作:
指令 | 帮助 |
---|---|
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)以及类型(包含基本类型以及泛型类型等)[26]。.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[26]。
Mono的最后一个大版本于2024年2月发布,之后微软将其移交至Wine进行管理[27]
然而,Mono仍然具有其特定的用途,例如作为Unity游戏引擎和Xamarin。Android/Xamarin.iOS的运行环境,因为其提供的轻量级JIT编译和AOT(Ahead Of Time)功能。
与ASP.NET Core的关系
[编辑].NET Core与ASP.NET Core的关系其实一开始并不是主从关系 [28],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支持下列操作系统[29] :
操作系统 | 版本 | 平台 | 配置 |
---|---|---|---|
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 |
参考
[编辑]- ^ Download .NET 9.0. [2024年10月8日].
- ^ https://dotnet.microsoft.com/en-us/download/dotnet/10.0.
- ^ https://dotnet.microsoft.com/en-us/download/dotnet/9.0; 检索日期: 2025年3月11日.
- ^ core/LICENSE.TXT. GitHub. [2018-06-04]. (原始内容存档于2020-05-01).
- ^ Overview of .NET Implementations Archive.today的存档,存档日期2016-02-27,
- ^ NET Core Roadmap. [2016-03-13]. (原始内容存档于2019-09-06).
- ^ .NET and .NET Core official support policy. .NET. Microsoft. [2022-08-25]. (原始内容存档于2020-06-01).
- ^ Announcing .NET Core 1.0. .NET Blog. Microsoft. June 27, 2016 [2022-08-25]. (原始内容存档于2020-06-01).
- ^ Announcing .NET Core 1.1. .NET Blog. Microsoft. November 16, 2016 [2022-08-25]. (原始内容存档于2020-06-01).
- ^ Announcing .NET Core 2.0. .NET Blog. Microsoft. August 14, 2017 [2022-08-25]. (原始内容存档于2020-06-01).
- ^ Announcing .NET Core 2.1. .NET Blog. Microsoft. May 30, 2018 [2022-08-25]. (原始内容存档于2019-12-25).
- ^ Announcing .NET Core 2.2. .NET Blog. Microsoft. December 4, 2018 [2022-08-25]. (原始内容存档于2019-02-16).
- ^ Announcing .NET Core 3.0. .NET Blog. Microsoft. September 23, 2019 [2022-08-25]. (原始内容存档于2020-06-01).
- ^ Announcing .NET Core 3.1. .NET Blog. Microsoft. December 3, 2019 [2022-08-25]. (原始内容存档于2020-06-01).
- ^ Announcing .NET 5.0. .NET Blog. Microsoft. November 10, 2020 [2022-08-25]. (原始内容存档于2021-02-18).
- ^ Announcing .NET 6. .NET Blog. Microsoft. November 8, 2021 [2022-08-25]. (原始内容存档于2022-01-02).
- ^ .NET 7 is Available Today. .NET Blog. Microsoft. November 8, 2022 [2022-11-09]. (原始内容存档于2022-12-22).
- ^ Generate your API documentation with DocFX. [2016-03-13]. (原始内容存档于2016-04-11).
- ^ JIT Compiler Structure. [2016-03-13]. (原始内容存档于2017-03-27).
- ^ LLILC Architecture Overview. [2016-03-13]. (原始内容存档于2017-03-27).
- ^ Announcing .NET Core and ASP.NET 5 RC. [2016-03-13]. (原始内容存档于2016-03-13).
- ^ Changes to Project.json. [2017-03-08]. (原始内容存档于2017-03-08).
- ^ Carter, Phillip; Knezevic, Zlatko. .NET Core – .NET Goes Cross-Platform with .NET Core. MSDN Magazine. Microsoft. 2016-04.
- ^ .NET and Universal Windows Platform Development. [2016-03-13]. (原始内容存档于2016-03-23).
- ^ Intro to .NET Core CLI. [2016-03-13]. (原始内容存档于2020-06-01).
- ^ 26.0 26.1 .NET Core Home. [2016-03-13]. (原始内容存档于2016-02-11).
- ^ mono. Thank you to all the Mono developers!. GitHub. [2025-02-22].
- ^ About .NET Core. [2016-03-13]. (原始内容存档于2016-03-13).
- ^ dotnet. .NET 9 - Supported OS versions. github. [2024-12-18]. (原始内容存档于2024-12-28).