热门问题
时间线
聊天
视角

.NET

由微软开发的开源跨平台应用程序开发框架 来自维基百科,自由的百科全书

.NET
Remove ads

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

事实速览 开发者, 首次发布 ...
Remove ads

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

.NET专案的主要目标有 [5]

  1. 支援或可以移转(port)到更多的作业系统平台与晶片架构(也就是未来计画会跨出x86平台)。
  2. 具有引人注目的效能与高可靠度。
  3. 开发人员能快速与直觉的获取 .NET开发环境。
  4. 在直觉与具生产力的情况下建造应用程式、使用文件、范例与NuGet元件。
Remove ads

历史

.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。

更多信息 版本, 发布日期 ...
Remove ads

核心功能

.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 [17],并运用于 .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[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。
  • macOS与Linux上使用的是LLILC(同时支援JIT和AOT)。

LLILC

LLILC(LLVM-based MSIL Compiler,英文发音为 "lilac")是 .NET在非Windows平台的MSIL编译器[19],基于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平台[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介面中编修套件参考的功能。

Remove ads

应用程式类型

.NET基于跨平台能力,在 .NET Core 3.0之前,并没有将与GUI高度相关的API移植到 .NET Core内,因此像是Windows Forms或是Windows Presentation Foundation(WPF)并未移植到 .NET Core。[22].NET支援主控台应用程式(Console Application)以及类别库(Class Library)类型的专案。

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

ASP.NET Core则以主控台应用程式驱动其代管环境Kestrel Server以支援ASP.NET Core程式的执行。

.NET CLI

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

更多信息 指令, 说明 ...

与其他平台的关系

.NET经常会拿来与其他平台做比较,尤其是它的源头 .NET Framework以及另一个相似性质的开源平台Mono。

.NET Framework

据微软的说明,.NET Core和 .NET Framework是子集(Subset)与超集(Superset)的关系,.NET Core将会实作出部份的 .NET Framework功能 (基本上是不含使用者介面的部份),例如 JIT(.NET Core采用 RyuJIT)、垃圾收集器(GC)以及型别(包含基本型别以及泛型型别等)[25]。.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[25]

Mono的最后一个大版本于2024年2月发布,之后微软将其移交至Wine进行管理[26]

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

与ASP.NET Core的关系

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

更多信息 作业系统, 版本 ...

参考

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads