.NET Core目前可用于更多平臺,因此最好了解如何打包、命名和版本控制。
這樣,無論用戶選擇在哪里運行 .NET,包維護人員均可以幫助確保獲得一致的體驗。 本文對以下用戶非常有用:- 嘗試從源生成 .NET Core。
- 想要更改 .NET Core CLI,但更改可能會影響生成的布局或包。
磁盤布局
安裝時,.NET Core 包含一些組件,這些組件在文件系統(tǒng)中排列如下:
復制
{dotnet_root} (*)
├── dotnet (1)
├── LICENSE.txt (8)
├── T (8)
├── host (*)
│ └── fxr (*)
│ └── <fxr version> (2)
├── sdk (*)
│ ├── <sdk version> (3)
│ └── NuGetFallbackFolder (4) (*)
├── packs (*)
│ ├── Micro (*)
│ │ └── <aspnetcore ref version> (11)
│ ├── Micro (*)
│ │ └── <netcore ref version> (12)
│ ├── Micro;rid> (*)
│ │ └── <apphost version> (13)
│ ├── Micro (*)
│ │ └── <desktop ref version> (14)
│ └── NETS (*)
│ └── <netstandard version> (15)
├── shared (*)
│ ├── Micro (*)
│ │ └── <runtime version> (5)
│ ├── Micro (*)
│ │ └── <aspnetcore version> (6)
│ ├── Micro (*)
│ │ └── <aspnetcore version> (6)
│ └── Micro (*)
│ └── <desktop app version> (7)
└── templates (*)
│ └── <templates version> (17)
/
├── etc/dotnet
│ └── install_location (16)
├── usr/share/man/man1
│ └── do (9)
└── usr/bin
└── dotnet (10)
- (1) dotnet 主機(也稱為“muxer”)有兩個不同角色:激活運行時以啟動應用程序,及激活 SDK 以向其分派命令。 主機是本機可執(zhí)行文件 )。
主機只有一個,不過大部分的其他組件都在帶有版本的目錄中(2、3、5 和 6)。 這意味著系統(tǒng)上可存在多個版本,因為它們是并排安裝的。
- (2) host/fxr/<fxr version> 包含了主機所使用的框架解析邏輯。 主機采用已安裝的最新 hostfxr。 在執(zhí)行 .NET Core 應用程序時,hostfxr 負責選擇合適的運行時。 例如,為 .NET Core 2.0.0 生成的應用程序會使用 2.0.5 運行時(如果可用)。 同樣,hostfxr 在開發(fā)期間也會選擇適當?shù)?SDK。
- (3) sdk/<sdk version> SDK(也稱為“工具”)是一組托管工具,可用于編寫和生成 .NET Core 庫和應用程序。 SDK 包括 .NET Core CLI、托管的語言編譯器、MSBuild 及相關(guān)生成任務和目標、NuGet、新項目模板等。
- (4) sdk/NuGetFallbackFolder 包含 SDK 在還原操作期間使用的 NuGet 包的緩存,例如在運行 dotnet restore 或 dotnet build 時。 此文件夾僅在 .NET Core 3.0 之前使用。 不能從源生成它,因為它包含來自 nuget.org 的預構(gòu)建二進制資產(chǎn)。
“共享” 文件夾包含框架。 共享框架提供一組位于中心位置的庫,從而讓不同的應用程序使用。
- (5) shared/Micro/<runtime version> 此框架包含.NET Core 運行時和支持托管庫。
- (6) shared.{App,All}/<aspnetcore version> 包含 ASP.NET Core 庫。 已開發(fā)且支持 Micro 下的庫(作為 .NET Core 項目的一部分)。 Micro 下的庫是一個超集,其中還包含第三方庫。
- (7) shared;desktop app version> 包含 Windows 桌面庫。 在非 Windows 平臺上不包含此項。
- (8) LICENSE.txt,T 分別是 .NET Core 許可證和 .NET Core 中使用的第三方庫的許可證。
- (9,10) do, dotnet do 是 dotnet 手冊頁。 dotnet 是指向 dotnet 主機 (1) 的符號鏈接。 這些文件安裝在已知位置用于系統(tǒng)集成。
- (11,12) Micro,Micro 分別描述了 x.y 版本 .NET Core 和 ASP.NET Core 的 API。 針對這些目標版本進行編譯時,將使用這些包。
- (13) Micro;rid> 包含平臺 rid 的本機二進制文件。 將 .NET Core 應用程序編譯為適用于該平臺的本機二進制文件時,將使用此二進制文件作為模板。
- (14) Micro 介紹 Windows 桌面應用程序 x.y 版本的 API。 在針對該目標進行編譯時,將使用這些文件。 在非 Windows 平臺上不提供此項。
- (15) NETS 描述了 netstandard x.y API。 在針對該目標進行編譯時,將使用這些文件。
- (16)“/etc/dotnet/install_location”是一個包含 {dotnet_root} 完整路徑的文件 。 該路徑可能以換行符結(jié)尾。 根路徑為 /usr/share/dotnet 時無需添加此文件。
- (17) templates 包含 SDK 使用的模板。 例如,dotnet new 在此處查找項目模板。
標記為 (*) 的文件夾被多個包使用。 某些包格式(例如,rpm)需要對此類文件夾進行特殊處理。 包維護人員必須處理這個問題。
推薦的包
.NET Core 版本控制基于運行時組件 [major].[minor] 版本號。 SDK 版本采用相同的 [major].[minor],并有一個獨立的 [patch],它為 SDK 合并了功能和修補語義。 例如:SDK 版本 2.2.302 是支持 2.2 運行時的 SDK 的第 3 個功能版本的第 2 個補丁版本。 有關(guān)版本控制的工作原理的詳細信息,請參閱 .NET Core 版本控制概述。
一些包在自己的名稱中就包含一部分版本號。 這允許你安裝特定版本。 版本名稱中不包含版本的剩余部分。 這允許 OS 包管理器更新這些包(例如,自動安裝安全修補程序)。 支持的包管理器特定于 Linux。
下面列出了推薦的包:
- dotnet-sdk-[major].[minor] - 安裝特定運行時的最新 SDK版本: <運行時版本>示例: do包含: (3),(4)依賴項: dotnet-runtime-[major].[minor]、aspnetcore-runtime-[major].[minor]、dotnet-targeting-pack-[major].[minor]、aspnetcore-targeting-pack-[major].[minor]、netstandard-targeting-pack-[netstandard_major].[netstandard_minor]、dotnet-apphost-pack-[major].[minor]、dotnet-templates-[major].[minor]
- aspnetcore-runtime-[major].[minor] - 安裝特定 ASP.NET Core 運行時版本: <aspnetcore 運行時版本>示例: a包含: (6)依賴項: dotnet-runtime-[major].[minor]
- dotnet-runtime-deps-[major].[minor] (可選) - 安裝運行自包含應用程序的依賴項版本: <運行時版本>示例: do依賴項: 特定于分發(fā)的依賴項
- dotnet-runtime-[major].[minor] - 安裝特定運行時版本: <運行時版本>示例: do包含: (5)依賴項: dotnet-hostfxr-[major].[minor]、dotnet-runtime-deps-[major].[minor]
- dotnet-hostfxr-[major].[minor] - 依賴項版本: <運行時版本>示例: do包含: (2)依賴項: dotnet-host
- dotnet-host - 依賴項版本: <運行時版本>示例: dotnet-host包含: (1),(8),(9),(10),(16)
- dotnet-apphost-pack-[major].[minor] - 依賴項版本: <運行時版本>包含: (13)
- dotnet-targeting-pack-[major].[minor] - 允許面向非最新的運行時版本: <運行時版本>包含: (12)
- aspnetcore-targeting-pack-[major].[minor] - 允許面向非最新的運行時版本: <aspnetcore 運行時版本>包含: (11)
- netstandard-targeting-pack-[netstandard_major].[netstandard_minor] - 允許面向 netstandard 版本版本: <sdk 版本>包含: (15)
- dotnet-templates-[major].[minor]版本: <sdk 版本>包含: (15)
dotnet-runtime-deps-[major].[minor] 需要了解發(fā)行版特定依賴項 。 因為發(fā)行版生成系統(tǒng)可能能夠自動派生包,所以包是可選的,如果選擇,會將這些依賴項直接添加到 dotnet-runtime-[major].[minor] 包中。
當包內(nèi)容位于受版本控制的文件夾下時,包名稱 [major].[minor] 與受版本控制的文件夾名稱匹配。 對于所有包(除 netstandard-targeting-pack-[netstandard_major].[netstandard_minor] 外),這也與 .NET Core 版本匹配。
包間的依賴關(guān)系應使用“等于或大于”版本要求 。 例如,do 要求 a >= 2.2.6。 這使用戶可以通過根包(例如 dnf update do)升級其安裝。
大多數(shù)分發(fā)都需要從源中構(gòu)建所有項目。 這對包有一些影響:
- 不能簡單地從源生成 shared/Micro 下的第三方庫。 因此 aspnetcore-runtime 包中省略了該文件夾。
- 使用 nuget.org 中的二進制項目填充了 NuGetFallbackFolder。 它應保留為空。
多個 dotnet-sdk 包可能會為 NuGetFallbackFolder 提供同樣的文件。 若要避免包管理器出現(xiàn)問題,這些文件應完全相同(包括校驗和、修改日期等等)。
生成包
dotnet/source-build 存儲庫中說明了如何生成 .NET Core SDK 的源 tarball 及其所有組件。 源版本存儲庫中的輸出內(nèi)容符合本文第一部分中所描述的布局。
1.《.net項目如何打包發(fā)布?終于找到答案了.NET Core 分發(fā)打包》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《.net項目如何打包發(fā)布?終于找到答案了.NET Core 分發(fā)打包》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2116509.html