Packaging.DebUOS 專門為 dotnet 應用制作 UOS 安裝包

2024年2月6日 22点热度 0人点赞

Packaging.DebUOS 是我所在的團隊開發開源的一款專門用在為 dotnet 的應用制作成為符合要求的 UOS 統信系統軟件安裝包的工具,此工具可以輔助開發者使用現有的工具鏈經過簡單的配置即可完成安裝包的制作

設計思想

Packaging.DebUOS 旨在通過使用 csproj 項目文件等方式進行配置,避免直接處理deb包的打包細節,從而降低學習成本。它內置了大量默認屬性,可以直接開箱即用而無需進行大量配置。此外,它依賴於 dotnet 構建命令,能與現有工具鏈無縫集成,方便接入團隊舊有的CI/CD服務。除了提供簡單易用的方法外,還提供了高級的命令行方法,以滿足高定制 deb 包制作的需求。在高級命令行用法部分將對這些高級方法進行補充介紹

使用方法

第一步,安裝 NuGet 庫。通過 NuGet 管理器或采用如下代碼編輯 csproj 項目文件安裝 Packaging.DebUOS 庫

 <ItemGroup>
<PackageReference Include="Packaging.DebUOS" Version="3.11.0"/>
</ItemGroup>

安裝 Packaging.DebUOS 庫不會影響到你的應用代碼邏輯,僅僅隻用來收集構建 UOS 應用安裝包所需的配置信息,以及深度集成到 dotnet 構建命令裡面

第二步,配置 UOS 的 AppId 屬性值。如下面代碼,編輯 csproj 項目文件,設置 AppId 屬性。按照 UOS 的規范,請務必使用廠商的倒置域名 產品名作為應用包名,如 com.example.demo 格式,前半部分為廠商域名倒置,後半部分為產品名,隻允許小寫字母

 <PropertyGroup>
<AppId>com.example.demo</AppId>
</PropertyGroup>

具體更改可參閱 FileDownloader 項目的更改內容: 配置 ID 用來打包 - dotnet-campus/dotnetCampus.FileDownloader@2d5769b - GitHub

第三步,執行命令行打包。在原有的 dotnet publish 命令裡面,帶上 -t:CreateDebUOS 參數,即可在正常發佈完成之後,自動使用發佈的輸出文件制作成為符合要求的 UOS 統信系統軟件安裝包

dotnet publish -c release -r linux-x64 --self-contained true -t:CreateDebUOS

如此即可完成一個最為簡單的符合要求的 UOS 統信系統軟件安裝包的制作。輸出的安裝包將會放在發佈文件夾裡面,可以將其拷貝到開發者的 UOS 系統上進行測試安裝,預計正常都能安裝成功

以上就是通過 Packaging.DebUOS 制作 UOS 統信系統軟件安裝包的最簡單步驟。但相信對於大部分開發者來說,僅僅隻是打出安裝包還不能滿足需求,開發者們還期望能夠更好的配置安裝包的更多信息,比如說安裝到開始菜單的圖標、開始菜單顯示的應用名、配置安裝包版本號等等,以下更多配置部分將會給出更多打包屬性以滿足開發者的更多定制需求

更多配置

以下列舉出一些常用配置屬性,更多的可配置屬性請參閱 DebUOSConfiguration.cs 代碼文件列舉的屬性

  • UOSDebVersion : 安裝包的版本號。默認將會取 Version 屬性

  • AppName : 應用名,英文名。默認取 AssemblyName 程序集名屬性

  • AppNameZhCN : 應用名,中文名,可不寫。將在開始菜單中顯示。如不寫,將在開始菜單中顯示英文的應用名

  • DesktopComment : 放入到 desktop 裡面的 Comment 屬性,作為關於本程序的通用簡述

  • DesktopCommentZhCN : 放入到 desktop 裡面的 Comment 屬性,功能和 DesktopComment 相同,隻是這是其中文版本

  • DebControlDescription : 放入到 DEBIAN\control 文件的 Description 屬性。如不填寫,默認將使用 Description 屬性的值。可在安裝包雙擊時看到此描述內容

  • Png32x32IconFile : 用於配置圖標,配置完成的圖標可在開始菜單作為應用程序圖標。對應的還有 Png16x16IconFile Png24x24IconFile 等等不同尺寸的屬性配置,以及矢量圖 svg 的 SvgIconFile 屬性配置

以下是對這些屬性進行配置的 csproj 代碼文件示例

 <PropertyGroup>
<!-- 打出來的 UOS 包的 AppId 和版本號 -->
<!-- 其中 AppId 是應用的唯一標識。按照 UOS 的規范,請務必使用廠商的倒置域名 產品名作為應用包名,如 `com.example.demo` 格式,前半部分為廠商域名倒置,後半部分為產品名,隻允許小寫字母 -->
<AppId>com.dotnetcampus.unofiledownloader</AppId>
<UOSDebVersion>1.0.1</UOSDebVersion>
<!-- 應用名,英文名 -->
<AppName>UnoFileDownloader</AppName>
<!-- 應用名,中文名,可不寫。將在開始菜單中顯示 -->
<AppNameZhCN>下載器</AppNameZhCN>
<Png32x32IconFile>Download32x32Icon.png</Png32x32IconFile>
<DesktopComment>The file downloader.</DesktopComment>
<DesktopCommentZhCN>文件下載器,代碼完全開源</DesktopCommentZhCN>
<DebControlDescription>The UNO file downloader.</DebControlDescription>
<DebControlHomepage>https://github.com/dotnet-campus/dotnetCampus.FileDownloader</DebControlHomepage>
<DebControlMaintainer>dotnet-campus</DebControlMaintainer>
</PropertyGroup>

以上的示例對應的真實項目代碼變更請參閱: 加上更多打包屬性 - dotnet-campus/dotnetCampus.FileDownloader@a834677 - GitHub

如期望自動在發佈之後輸出符合 UOS 規范的 deb 包,期望不需要在命令行添加 -t:CreateDebUOS 參數,則可以通過配置 <AutoCreateDebUOSAfterPublish>true</AutoCreateDebUOSAfterPublish> 屬性到 csproj 從而實現在發佈之後,自動執行打包,如以下代碼

 <PropertyGroup>
<AutoCreateDebUOSAfterPublish>true</AutoCreateDebUOSAfterPublish>
</PropertyGroup>

如果僅通過屬性配置依然無法達到預期的安裝包制作要求,可以參考以下的高級命令行用法

高級命令行用法

命令行的使用方法是通過 dotnet tool 調用 Packaging.DebUOS.Tool 工具進行打包。通過 Packaging.DebUOS.Tool 工具可以作為 dpkg-deb 工具在 Windows 上的部分功能替代品

使用命令行工具比較適合創建構建更為復雜的 deb 安裝包,可以有更強的定制化,適合對 UOS 安裝包規范較熟悉的開發者使用

使用以下命令進行更新或安裝工具:

dotnet tool update -g Packaging.DebUOS.Tool

將已經準備好的符合 UOS 安裝包文件組織規范的文件夾打包為 deb 安裝包:

dotnet dpkg-debuos -b C:\lindexi\DebPacking -o C:\lindexi\UOS\Foo.deb

以上的 C:\lindexi\DebPacking 為已準備好的符合 UOS 安裝包文件組織規范的文件夾,以上的 C:\lindexi\UOS\Foo.deb 為打包輸出的文件。其中 -o 指定打包輸出文件參數可以忽略,如忽略此參數,則將會在打包文件夾輸出 deb 安裝包

通過命令行工具打包的方法,可以讓開發者自行組織 UOS 安裝包文件夾,可以讓開發者有更自由更高級的定制

開源地址

此工具使用最友好的 MIT 協議在 GitHub 上完全開源,詳細請看: https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK

如有問題歡迎到 GitHub 上提 Issus 交流

參考文檔

  • 一步步教你在 Windows 上構建 dotnet 系應用的 UOS 軟件安裝包

  • 應用打包規范 文檔中心-統信UOS生態社區

感謝

  • https://github.com/quamotion/dotnet-packaging