.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/9.0; 检索日期: 2025年2月12日.
- ^ https://dotnet.microsoft.com/en-us/download/dotnet/10.0.
- ^ 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).