热门问题
时间线
聊天
视角

.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