跳转到内容

.NET

本页使用了标题或全文手工转换
维基百科,自由的百科全书
(重定向自.NET Core
.NET
开发者.NET基金会
首次发布2016年6月27日,​8年前​(2016-06-27
当前版本
  • 9.0.0-rc.2(2024年10月8日;最终测试版本)[1]
  • 10.0.0-preview.1(2025年2月25日;测试版本)[2]
  • 9.0.3(2025年3月11日;短期支持版本)[3]
编辑维基数据链接
源代码库 编辑维基数据链接
编程语言C++C♯
操作系统WindowsLinuxmacOS
类型软件框架
许可协议MIT许可证[4]
网站dotnet.microsoft.com

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

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

.NET项目的主要目标有 [6]

  1. 支持或可以移转(port)到更多的操作系统平台与芯片架构(也就是未来项目会跨出x86平台)。
  2. 具有引人注目的性能与高可靠度。
  3. 开发人员能快速与直觉的获取 .NET开发环境。
  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。

版本 发布日期 一同发布的产品 最新补丁版本 补丁发布日期 终止支持[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英语.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是以预先编译英语Ahead-of-time compilation为主的核心功能,在 .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

参考

[编辑]
  1. ^ Download .NET 9.0. [2024年10月8日]. 
  2. ^ https://dotnet.microsoft.com/en-us/download/dotnet/10.0.
  3. ^ https://dotnet.microsoft.com/en-us/download/dotnet/9.0; 检索日期: 2025年3月11日.
  4. ^ core/LICENSE.TXT. GitHub. [2018-06-04]. (原始内容存档于2020-05-01). 
  5. ^ Overview of .NET Implementations Archive.today存档,存档日期2016-02-27,
  6. ^ NET Core Roadmap. [2016-03-13]. (原始内容存档于2019-09-06). 
  7. ^ .NET and .NET Core official support policy. .NET. Microsoft. [2022-08-25]. (原始内容存档于2020-06-01). 
  8. ^ Announcing .NET Core 1.0. .NET Blog. Microsoft. June 27, 2016 [2022-08-25]. (原始内容存档于2020-06-01). 
  9. ^ Announcing .NET Core 1.1. .NET Blog. Microsoft. November 16, 2016 [2022-08-25]. (原始内容存档于2020-06-01). 
  10. ^ Announcing .NET Core 2.0. .NET Blog. Microsoft. August 14, 2017 [2022-08-25]. (原始内容存档于2020-06-01). 
  11. ^ Announcing .NET Core 2.1. .NET Blog. Microsoft. May 30, 2018 [2022-08-25]. (原始内容存档于2019-12-25). 
  12. ^ Announcing .NET Core 2.2. .NET Blog. Microsoft. December 4, 2018 [2022-08-25]. (原始内容存档于2019-02-16). 
  13. ^ Announcing .NET Core 3.0. .NET Blog. Microsoft. September 23, 2019 [2022-08-25]. (原始内容存档于2020-06-01). 
  14. ^ Announcing .NET Core 3.1. .NET Blog. Microsoft. December 3, 2019 [2022-08-25]. (原始内容存档于2020-06-01). 
  15. ^ Announcing .NET 5.0. .NET Blog. Microsoft. November 10, 2020 [2022-08-25]. (原始内容存档于2021-02-18). 
  16. ^ Announcing .NET 6. .NET Blog. Microsoft. November 8, 2021 [2022-08-25]. (原始内容存档于2022-01-02). 
  17. ^ .NET 7 is Available Today. .NET Blog. Microsoft. November 8, 2022 [2022-11-09]. (原始内容存档于2022-12-22). 
  18. ^ Generate your API documentation with DocFX. [2016-03-13]. (原始内容存档于2016-04-11). 
  19. ^ JIT Compiler Structure. [2016-03-13]. (原始内容存档于2017-03-27). 
  20. ^ LLILC Architecture Overview. [2016-03-13]. (原始内容存档于2017-03-27). 
  21. ^ Announcing .NET Core and ASP.NET 5 RC. [2016-03-13]. (原始内容存档于2016-03-13). 
  22. ^ Changes to Project.json. [2017-03-08]. (原始内容存档于2017-03-08). 
  23. ^ Carter, Phillip; Knezevic, Zlatko. .NET Core – .NET Goes Cross-Platform with .NET Core. MSDN Magazine. Microsoft. 2016-04. 
  24. ^ .NET and Universal Windows Platform Development. [2016-03-13]. (原始内容存档于2016-03-23). 
  25. ^ Intro to .NET Core CLI. [2016-03-13]. (原始内容存档于2020-06-01). 
  26. ^ 26.0 26.1 .NET Core Home. [2016-03-13]. (原始内容存档于2016-02-11). 
  27. ^ mono. Thank you to all the Mono developers!. GitHub. [2025-02-22]. 
  28. ^ About .NET Core. [2016-03-13]. (原始内容存档于2016-03-13). 
  29. ^ dotnet. .NET 9 - Supported OS versions. github. [2024-12-18]. (原始内容存档于2024-12-28).