.NET

跨平台应用程序开发框架
(重定向自.NET Core

.NET (3.1版以前称作.NET Core)是微软开发的第一个跨平台 (WindowsMac OSXLinux)的应用程序开发框架(Application Framework),未来也将会支持FreeBSDAlpine 平台。.Net Core也是微软在一开始发展时就开源的软件平台[4],它经常也会拿来和现有的开源 .NET 平台Mono比较。

.NET
开发者.NET基金会
首次发布2016年6月27日,​8年前​(2016-06-27
当前版本
  • 9.0.0-rc.2(2024年10月8日;最终测试版本)[1]
  • 9.0.0(2024年11月12日;短期支持版本)[2]
编辑维基数据链接
源代码库 编辑维基数据链接
编程语言C++C♯
操作系统WindowsLinuxmacOS
类型软件框架
许可协议MIT许可证[3]
网站dotnet.microsoft.com

由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET Core 会包含 .NET Framework 的类别库,但与 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 大包式安装的作法截然不同,同时各包亦有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。

.NET Core 项目的主要目标有 [5]

  1. 支持或可以移转 (port) 到更多的操作系统平台与芯片架构 (也就是未来项目会跨出 x86 平台)。
  2. 具有引人注目的性能与高可靠度。
  3. 开发人员能快速与直觉的获取 .NET Core 开发环境。
  4. 在直觉与具生产力的情况下建造应用程序,使用文件,示例与 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 。

版本 发布日期 一同发布的产品 最新补丁版本 补丁发布日期 终止支持[6]
旧版本,不再支持: .NET Core 1.0 2016-06-27[7] Visual Studio 2015 Update 3 1.0.16 2019年5月14日 2019年6月27日
旧版本,不再支持: .NET Core 1.1 2016-11-16[8] Visual Studio 2017 Version 15.0 1.1.13 2019年5月14日 2019年6月27日
旧版本,不再支持: .NET Core 2.0 2017-08-14[9] Visual Studio 2017 Version 15.3 2.0.9 2018年7月10日 2018年10月1日
旧版本,不再支持: .NET Core 2.1 2018-05-30[10] Visual Studio 2017 Version 15.7 2.1.30 (LTS) 2021年8月19日 2021年8月21日
旧版本,不再支持: .NET Core 2.2 2018-12-04[11] Visual Studio 2019 Version 16.0 2.2.8 2019年11月19日 2019年12月23日
旧版本,不再支持: .NET Core 3.0 2019-09-23[12] Visual Studio 2019 3.0.3 2020年2月18日 2020年3月3日
旧版本,不再支持: .NET Core 3.1 2019-12-03[13] Visual Studio 2019 3.1.32 (LTS) 2022年12月13日 2022年12月13日
旧版本,不再支持: .NET 5 2020-11-10[14] Visual Studio 2019 Version 16.8 5.0.17 2022年5月10日 2022年5月10日
旧版本,不再支持: .NET 6 2021-11-08[15] Visual Studio 2022 Version 17.0 6.0.36 2024年11月12日 2024年11月12日
旧版本,不再支持: .NET 7 2022-11-08[16] 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 是由许多项目所组成,除了基本的类别库 (Core FX) 之外,也包含采用 RyuJIT 编译的执行平台 Core CLR、编译器平台 .NET Compiler Platform、采用 AOT 编译技术运行优化的包 Core RT (.NET Core Runtime),以及跨平台的 MSIL 编译器 LLILC (LLVM-based MSIL Compiler) 等项目。

同时,微软也发展了一个建置技术文件的平台 docfx [17],并运用于 .NET Core 的文件网站。

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[18]

Core CLR

编辑

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

Core RT

编辑

Core RT 是以 预先编译英语Ahead-of-time compilation为主的核心功能,在 .NET Core 内称为 Core RT,在 UWP 则是称为 .NET Native。

Core RT 会在建造时期 (非执行期) 在编译时将 MSIL 转换成平台原生的机器代码,以获取较短的启动时间 (JIT 采用的是执行时期编译,使得启动时间拉长),以及存储器用量减少的优点。Core RT 会在不同的平台使用不同的 AOT 技术:

  • Windows 上使用的是 .NET Native。
  • Mac OS 与 Linux 上使用的是 LLILC (同时支持 JIT 和 AOT)。

LLILC (LLVM-based MSIL Compiler,英文发音为 "lilac") 是 .NET Core 在非 Windows 平台的 MSIL 编译器[19],基于 ECMA-335 (Common Language Infrastructure) 的标准将 MSIL 编译成原生码执行,适用于可运行 LLVM 的操作系统,例如 Mac OSX 与 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 平台[20]

例如下列 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 [21],例如下列 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 Core 基于跨平台能力,并没有将与 GUI 高度相关的 API 移植到 .NET Core 内,因此像是 Windows Forms 或是 Windows Presentation Foundation (WPF) 并未移植到 .NET Core。.NET Core 支持控制台应用程序 (Console Application) 以及类别库 (Class Library) 类型的项目。

不过微软在其 Universal Windows Platform (UWP) 开发平台使用了 .NET Core[22],并且利用 .NET Native 技术将其性能提升至十分接近原生码的速度。

ASP.NET Core 则以控制台应用程序驱动其托管环境 Kestrel Server 以支持 ASP.NET Core 程序的执行。

.NET CLI

编辑

.NET CLI (Command-Line Interface) 指令列工具是 .NET Core 处理建造、执行与编辑工作的主要工具 [23],有几个主要的动作:

指令 帮助
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 Core 经常会拿来与其他平台做模拟,尤其是它的源头 .NET Framework 以及另一个相似性质的开源平台 Mono。

.NET Framework

编辑

据微软的帮助,.NET Core 和 .NET Framework 是子集 (Subset) 与超集 (Superset) 的关系,.NET Core 将会实现出部分的 .NET Framework 功能 (基本上是不含用户界面的部分),例如 JIT (.NET Core 采用 RyuJIT)、垃圾收集器 (GC) 以及类型 (包含基本类型以及泛型类型等)[24]。.NET Framework 与 .NET Core 已经在 .NET 5 及以后合并为统一的 .NET 平台

Mono 是另一个已发展许久的 .NET Framework 跨平台开源版本,起初由社群主导,并由Xamarin等技术推动了.NET跨平台应用的开发。在.NET Core问世后,微软逐步将跨平台的核心功能和支持纳入微软官方的.NET生态中,最终在.NET5及以后版本将.NET Core和Mono合并至统一的.NET平台。此后不再区分.NET Framework .NET Core和Mono[24]

然而,Mono仍然具有其特定的用途,例如作为Unity游戏引擎和Xamarin。Android/Xamarin.iOS的运行环境,因为其提供的轻量级JIT编译和AOT(Ahead Of Time)功能。

与 ASP.NET Core 的关系

编辑

.NET Core 与 ASP.NET Core 的关系其实一开始并不是主从关系 [25],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 支持下列操作系统[26]

操作系统 版本 平台 配置
Windows 10 Version 1607+ x64, x86, Arm64
Windows 11 Version 22000+ 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

参考

编辑
  1. ^ Download .NET 9.0. [2024年10月8日]. 
  2. ^ Download .NET 9.0. [2024年11月12日]. 
  3. ^ core/LICENSE.TXT. GitHub. [2018-06-04]. (原始内容存档于2020-05-01). 
  4. ^ Overview of .NET Implementations Archive.is存档,存档日期2016-02-27,
  5. ^ NET Core Roadmap. [2016-03-13]. (原始内容存档于2019-09-06). 
  6. ^ .NET and .NET Core official support policy. .NET. Microsoft. [2022-08-25]. (原始内容存档于2020-06-01). 
  7. ^ Announcing .NET Core 1.0. .NET Blog. Microsoft. June 27, 2016 [2022-08-25]. (原始内容存档于2020-06-01). 
  8. ^ Announcing .NET Core 1.1. .NET Blog. Microsoft. November 16, 2016 [2022-08-25]. (原始内容存档于2020-06-01). 
  9. ^ Announcing .NET Core 2.0. .NET Blog. Microsoft. August 14, 2017 [2022-08-25]. (原始内容存档于2020-06-01). 
  10. ^ Announcing .NET Core 2.1. .NET Blog. Microsoft. May 30, 2018 [2022-08-25]. (原始内容存档于2019-12-25). 
  11. ^ Announcing .NET Core 2.2. .NET Blog. Microsoft. December 4, 2018 [2022-08-25]. (原始内容存档于2019-02-16). 
  12. ^ Announcing .NET Core 3.0. .NET Blog. Microsoft. September 23, 2019 [2022-08-25]. (原始内容存档于2020-06-01). 
  13. ^ Announcing .NET Core 3.1. .NET Blog. Microsoft. December 3, 2019 [2022-08-25]. (原始内容存档于2020-06-01). 
  14. ^ Announcing .NET 5.0. .NET Blog. Microsoft. November 10, 2020 [2022-08-25]. (原始内容存档于2021-02-18). 
  15. ^ Announcing .NET 6. .NET Blog. Microsoft. November 8, 2021 [2022-08-25]. (原始内容存档于2022-01-02). 
  16. ^ .NET 7 is Available Today. .NET Blog. Microsoft. November 8, 2022 [2022-11-09]. (原始内容存档于2022-12-22). 
  17. ^ Generate your API documentation with DocFX. [2016-03-13]. (原始内容存档于2016-04-11). 
  18. ^ JIT Compiler Structure. [2016-03-13]. (原始内容存档于2017-03-27). 
  19. ^ LLILC Architecture Overview. [2016-03-13]. (原始内容存档于2017-03-27). 
  20. ^ Announcing .NET Core and ASP.NET 5 RC. [2016-03-13]. (原始内容存档于2016-03-13). 
  21. ^ Changes to Project.json. [2017-03-08]. (原始内容存档于2017-03-08). 
  22. ^ .NET and Universal Windows Platform Development. [2016-03-13]. (原始内容存档于2016-03-23). 
  23. ^ Intro to .NET Core CLI. [2016-03-13]. (原始内容存档于2020-06-01). 
  24. ^ 24.0 24.1 .NET Core Home. [2016-03-13]. (原始内容存档于2016-02-11). 
  25. ^ About .NET Core. [2016-03-13]. (原始内容存档于2016-03-13). 
  26. ^ dotnet. .NET 9 - Supported OS versions. github. [2024-12-18].