views 多个文件夹 netcore_.NET Core 分发打包
由于 .NET Core 現已可用于更多平臺,因此了解如何為其打包、命名并進行版本控制將很有用。 這樣,無論用戶選擇在哪里運行 .NET,包維護人員均可以幫助確保獲得一致的體驗。 本文對以下用戶非常有用:
- 嘗試從源生成 .NET Core。
- 想要更改 .NET Core CLI,但更改可能會影響生成的布局或包。
磁盤布局
安裝時,.NET Core 包含一些組件,這些組件在文件系統中排列如下:
復制
{dotnet_root} (*)├── dotnet (1)├── LICENSE.txt (8)├── ThirdPartyNotices.txt (8)├── host (*)│ └── fxr (*)│ └── (2)├── sdk (*)│ ├── (3)│ └── NuGetFallbackFolder (4) (*)├── packs (*)│ ├── Microsoft.AspNetCore.App.Ref (*)│ │ └── (11)│ ├── Microsoft.NETCore.App.Ref (*)│ │ └── (12)│ ├── Microsoft.NETCore.App.Host. (*)│ │ └── (13)│ ├── Microsoft.WindowsDesktop.App.Ref (*)│ │ └── (14)│ └── NETStandard.Library.Ref (*)│ └── (15)├── shared (*)│ ├── Microsoft.NETCore.App (*)│ │ └── (5)│ ├── Microsoft.AspNetCore.App (*)│ │ └── (6)│ ├── Microsoft.AspNetCore.All (*)│ │ └── (6)│ └── Microsoft.WindowsDesktop.App (*)│ └── (7)└── templates (*)│ └── (17)/├── etc/dotnet│ └── install_location (16)├── usr/share/man/man1│ └── dotnet.1.gz (9)└── usr/bin └── dotnet (10)- (1) dotnet 主機(也稱為“muxer”)有兩個不同角色:激活運行時以啟動應用程序,及激活 SDK 以向其分派命令。 主機是本機可執行文件 (dotnet.exe)。
主機只有一個,不過大部分的其他組件都在帶有版本的目錄中(2、3、5 和 6)。 這意味著系統上可存在多個版本,因為它們是并排安裝的。
- (2) host/fxr/ 包含了主機所使用的框架解析邏輯。 主機采用已安裝的最新 hostfxr。 在執行 .NET Core 應用程序時,hostfxr 負責選擇合適的運行時。 例如,為 .NET Core 2.0.0 生成的應用程序會使用 2.0.5 運行時(如果可用)。 同樣,hostfxr 在開發期間也會選擇適當的 SDK。
- (3) sdk/ SDK(也稱為“工具”)是一組托管工具,可用于編寫和生成 .NET Core 庫和應用程序。 SDK 包括 .NET Core CLI、托管的語言編譯器、MSBuild 及相關生成任務和目標、NuGet、新項目模板等。
- (4) sdk/NuGetFallbackFolder 包含 SDK 在還原操作期間使用的 NuGet 包的緩存,例如在運行 dotnet restore 或 dotnet build 時。 此文件夾僅在 .NET Core 3.0 之前使用。 不能從源生成它,因為它包含來自 nuget.org 的預構建二進制資產。
“共享” 文件夾包含框架。 共享框架提供一組位于中心位置的庫,從而讓不同的應用程序使用。
- (5) shared/Microsoft.NETCore.App/ 此框架包含.NET Core 運行時和支持托管庫。
- (6) shared/Microsoft.AspNetCore.{App,All}/ 包含 ASP.NET Core 庫。 已開發且支持 Microsoft.AspNetCore.App 下的庫(作為 .NET Core 項目的一部分)。 Microsoft.AspNetCore.All 下的庫是一個超集,其中還包含第三方庫。
- (7) shared/Microsoft.Desktop.App/ 包含 Windows 桌面庫。 在非 Windows 平臺上不包含此項。
- (8) LICENSE.txt,ThirdPartyNotices.txt 分別是 .NET Core 許可證和 .NET Core 中使用的第三方庫的許可證。
- (9,10) dotnet.1.gz, dotnet dotnet.1.gz 是 dotnet 手冊頁。 dotnet 是指向 dotnet 主機 (1) 的符號鏈接。 這些文件安裝在已知位置用于系統集成。
- (11,12) Microsoft.NETCore.App.Ref,Microsoft.AspNetCore.App.Ref 分別描述了 x.y 版本 .NET Core 和 ASP.NET Core 的 API。 針對這些目標版本進行編譯時,將使用這些包。
- (13) Microsoft.NETCore.App.Host. 包含平臺 rid 的本機二進制文件。 將 .NET Core 應用程序編譯為適用于該平臺的本機二進制文件時,將使用此二進制文件作為模板。
- (14) Microsoft.WindowsDesktop.App.Ref 介紹 Windows 桌面應用程序 x.y 版本的 API。 在針對該目標進行編譯時,將使用這些文件。 在非 Windows 平臺上不提供此項。
- (15) NETStandard.Library.Ref 描述了 netstandard x.y API。 在針對該目標進行編譯時,將使用這些文件。
- (16)“/etc/dotnet/install_location”是一個包含 {dotnet_root} 完整路徑的文件 。 該路徑可能以換行符結尾。 根路徑為 /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 個補丁版本。 有關版本控制的工作原理的詳細信息,請參閱 .NET Core 版本控制概述。
一些包在自己的名稱中就包含一部分版本號。 這允許你安裝特定版本。 版本名稱中不包含版本的剩余部分。 這允許 OS 包管理器更新這些包(例如,自動安裝安全修補程序)。 支持的包管理器特定于 Linux。
下面列出了推薦的包:
- dotnet-sdk-[major].[minor] - 安裝特定運行時的最新 SDK版本: 示例: dotnet-sdk-2.1包含: (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-runtime-2.1包含: (6)依賴項: dotnet-runtime-[major].[minor]
- dotnet-runtime-deps-[major].[minor] (可選) - 安裝運行自包含應用程序的依賴項版本: 示例: dotnet-runtime-deps-2.1依賴項: 特定于分發的依賴項
- dotnet-runtime-[major].[minor] - 安裝特定運行時版本: 示例: dotnet-runtime-2.1包含: (5)依賴項: dotnet-hostfxr-[major].[minor]、dotnet-runtime-deps-[major].[minor]
- dotnet-hostfxr-[major].[minor] - 依賴項版本: 示例: dotnet-hostfxr-3.0包含: (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] - 允許面向非最新的運行時版本: 包含: (11)
- netstandard-targeting-pack-[netstandard_major].[netstandard_minor] - 允許面向 netstandard 版本版本: 包含: (15)
- dotnet-templates-[major].[minor]版本: 包含: (15)
dotnet-runtime-deps-[major].[minor] 需要了解發行版特定依賴項 。 因為發行版生成系統可能能夠自動派生包,所以包是可選的,如果選擇,會將這些依賴項直接添加到 dotnet-runtime-[major].[minor] 包中。
當包內容位于受版本控制的文件夾下時,包名稱 [major].[minor] 與受版本控制的文件夾名稱匹配。 對于所有包(除 netstandard-targeting-pack-[netstandard_major].[netstandard_minor] 外),這也與 .NET Core 版本匹配。
包間的依賴關系應使用“等于或大于”版本要求 。 例如,dotnet-sdk-2.2:2.2.401 要求 aspnetcore-runtime-2.2 >= 2.2.6。 這使用戶可以通過根包(例如 dnf update dotnet-sdk-2.2)升級其安裝。
大多數分發都需要從源中構建所有項目。 這對包有一些影響:
- 不能簡單地從源生成 shared/Microsoft.AspNetCore.All 下的第三方庫。 因此 aspnetcore-runtime 包中省略了該文件夾。
- 使用 nuget.org 中的二進制項目填充了 NuGetFallbackFolder。 它應保留為空。
多個 dotnet-sdk 包可能會為 NuGetFallbackFolder 提供同樣的文件。 若要避免包管理器出現問題,這些文件應完全相同(包括校驗和、修改日期等等)。
生成包
dotnet/source-build 存儲庫中說明了如何生成 .NET Core SDK 的源 tarball 及其所有組件。 源版本存儲庫中的輸出內容符合本文第一部分中所描述的布局。
總結
以上是生活随笔為你收集整理的views 多个文件夹 netcore_.NET Core 分发打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python按列读取txt文件_如何使用
- 下一篇: python将文本文件加密后输出_Pyt