設計思想
Packaging.DebUOS 旨在透過使用 csproj 專案檔案等方式進行配置,避免直接處理deb包的打包細節,從而降低學習成本。它內建了大量預設屬性,可以直接開箱即用而無需進行大量配置。此外,它依賴於 dotnet 構建命令,能與現有工具鏈無縫整合,方便接入團隊舊有的CI/CD服務。除了提供簡單易用的方法外,還提供了高階的命令列方法,以滿足高定製 deb 包製作的需求。在高階命令列用法部分將對這些高階方法進行補充介紹
使用方法
第一步,安裝 NuGet 庫。透過 NuGet 管理器或採用如下程式碼編輯 csproj 專案檔案安裝 Packaging.DebUOS 庫
<ItemGroup>
<PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
</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 配置大全 文件列舉的屬性,或參考本文末尾的全部配置項章節
- 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>
完成以上配置即可構建出一個比較完備的 deb 安裝包了
以上的示例對應的真實專案程式碼變更請參閱: 加上更多打包屬性 - 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
如使用過程有問題,歡迎加入國產應用開發群交流: 810052083
全部配置項
大部分配置都是可選項,以下僅僅作為示例參考使用
<!-- 自定義的 DEBIAN\control 檔案路徑,將直接使用該檔案作為 control 檔案,忽略其他配置。這是比較高階的配置,一般不需要使用,可以用來滿足更多的定製化需求 -->
<DebControlFile>Assets\control</DebControlFile>
<!-- 自定義的 DEBIAN\postinst 檔案路徑,將直接使用該檔案作為 postinst 檔案,忽略其他配置。這是比較高階的配置,一般不需要使用,可以用來滿足更多的定製化需求
postinst:軟體安裝時執行的指令碼
按照 UOS 的規範,除對本程式根目錄檔案進行必要的操作修改外,禁止使用deb的postinst等鉤子對系統檔案進行修改,包含這些指令碼 的軟體包都無法上架 -->
<DebPostinstFile>Assets\PostInstall.sh</DebPostinstFile>
<!-- 自定義的 DEBIAN\prerm 檔案路徑,將直接使用該檔案作為 prerm 檔案,忽略其他配置。這是比較高階的配置,一般不需要使用,可以用來滿足更多的定製化需求
prerm:軟體解除安裝前執行的指令碼
按照 UOS 的規範,除對本程式根目錄檔案進行必要的操作修改外,禁止使用deb的postinst等鉤子對系統檔案進行修改,包含這些指令碼 的軟體包都無法上架 -->
<DebPrermFile>Assets\PreRm.sh</DebPrermFile>
<!-- 自定義的 DEBIAN\postrm 檔案路徑,將直接使用該檔案作為 postrm 檔案,忽略其他配置。這是比較高階的配置,一般不需要使用,可以用來滿足更多的定製化需求
postrm:軟體解除安裝後執行的指令碼
按照 UOS 的規範,除對本程式根目錄檔案進行必要的操作修改外,禁止使用deb的postinst等鉤子對系統檔案進行修改,包含這些指令碼 的軟體包都無法上架 -->
<DebPostrmFile>Assets\PostRm.sh</DebPostrmFile>
<!-- 自定義的 DEBIAN\preinst 檔案路徑,將直接使用該檔案作為 preinst 檔案,忽略其他配置。這是比較高階的配置,一般不需要使用,可以用來滿足更多的定製化需求 -->
<DebPreinstFile>Assets\preinst.sh</DebPreinstFile>
<!-- 自定義的 opt\apps\${AppId}\info 檔案路徑,將直接使用該檔案作為 info 檔案,忽略其他配置。這是比較高階的配置,一般不 需要使用,可以用來滿足更多的定製化需求 -->
<DebInfoFile>Assets\Info.json</DebInfoFile>
<!-- 自定義的 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案路徑,將直接使用該檔案作為 desktop 檔案,忽略 其他配置。這是比較高階的配置,一般不需要使用,可以用來滿足更多的定製化需求 -->
<DebDesktopFile>Assets\Demo.desktop</DebDesktopFile>
<!-- 應用的 AppId 值,用來組織應用的安裝路徑,同時也是應用的唯一標識。按照 UOS 的規範,請務必使用廠商的倒置域名+產品名作為應用包名,如 `com.example.demo` 格式,前半部分為廠商域名倒置,後半部分為產品名,如果使用非擁有者的域名作為字首,可能會引起該域名擁有者進行申訴,導致軟體被申訴下架或者刪除,只允許小寫字母。不寫預設和 AssemblyName 屬性相同 -->
<AppId>com.example.demo</AppId>
<!-- 應用的 AppId 值,用來組織應用的安裝路徑,同時也是應用的唯一標識。按照 UOS 的規範,請務必使用廠商的倒置域名+產品名作為應用包名,如 `com.example.demo` 格式,前半部分為廠商域名倒置,後半部分為產品名,如果使用非擁有者的域名作為字首,可能會引起該域名擁有者進行申訴,導致軟體被申訴下架或者刪除,只允許小寫字母。不寫預設和 AppId 屬性相同
與 AppId 屬性不同的是,該屬性明確給製作 UOS 的包使用,不會和其他的邏輯的 AppId 混淆 -->
<UOSAppId>com.example.demo</UOSAppId>
<!-- 版本號,預設是 1.0.0 版本 -->
<Version>1.2.3</Version>
<!-- 專門給製作 UOS 的包使用的版本號,不寫將使用 Version 屬性的值。可使用 a.b.c 格式,也可以比較複雜的語義版本號格式,如 `1.2.3-2+b1` 等格式 -->
<UOSDebVersion>1.2.3</UOSDebVersion>
<!-- 配置放入到 DEBIAN\control 檔案的 Section 屬性,可以選用 utils,admin, devel, doc, libs, net, 或者 unknown 等等,代 表著該軟體包在 Debian 倉庫中將被歸屬到什麼樣的邏輯子分類中。預設是 utils 型別 -->
<DebControlSection>utils</DebControlSection>
<!-- 配置放入到 DEBIAN\control 檔案的 Priority 屬性,可以選用 required, important, standard, optional, extra 等等,代表 著該軟體包在 Debian 倉庫中的優先順序,optional 優先順序適用於與優先順序為 required、important 或 standard 的軟體包不衝突的新軟體包。也可以做其它取值。若是不明瞭,請使用 optional。預設是 optional 型別 -->
<DebControlPriority>optional</DebControlPriority>
<!-- 配置放入到 DEBIAN\control 檔案的 Architecture 屬性,以及 opt\apps\${AppId}\info 檔案的 arch 屬性。可以選用 amd64, i386, arm64, armel, armhf, mips, mips64el, mipsel, ppc64el, s390x, 或者 all 等等,代表著該軟體包在 Debian 倉庫中的架構,amd64 代表著 64 位的 x86 架構,i386 代表著 32 位的 x86 架構,arm64 代表著 64 位的 ARM 架構,armel 代表著 32 位的 ARM 架構,armhf 代表著 32 位的 ARM 架構,mips 代表著 32 位的 MIPS 架構,mips64el 代表著 64 位的 MIPS 架構,mipsel 代表著 32 位的 MIPS 架構,ppc64el 代表著 64 位的 PowerPC 架構,s390x 代表著 64 位的 IBM S/390 架構,all 代表著所有架構。目前商店支援以下的 amd64, mips64el, arm64, sw_64, loongarch64 幾種架構。預設將根據 RuntimeIdentifier 屬性決定是 amd64 、arm64型別 -->
<Architecture>amd64</Architecture>
<!-- 配置放入到 DEBIAN\control 檔案的 Multi-Arch 屬性。預設是 foreign 型別 -->
<DebControlMultiArch>foreign</DebControlMultiArch>
<!-- 配置放入到 DEBIAN\control 檔案的 Build-Depends 屬性。預設是 debhelper (>=9) 型別 -->
<DebControlBuildDepends>debhelper (>=9)</DebControlBuildDepends>
<!-- 配置放入到 DEBIAN\control 檔案的 Standards-Version 屬性。預設是 3.9.6 的值 -->
<DebControlStandardsVersion>3.9.6</DebControlStandardsVersion>
<!-- 配置放入到 DEBIAN\control 檔案的 Maintainer 屬性。如不填寫,預設將會按照 Authors Author Company Publisher 的順序, 找到第一個不為空的值,作為 Maintainer 的值。如最終依然為空,可能導致打出來的安裝包在使用者端安裝之後,不能在開始選單中找到應用的圖示 -->
<DebControlMaintainer>dotnet-campus</DebControlMaintainer>
<!-- 配置放入到 DEBIAN\control 檔案的 Homepage 屬性。如不填寫,將嘗試使用 PackageProjectUrl 屬性,如依然為空則採用預設值。預設是 https://www.uniontech.com 的值 -->
<DebControlHomepage>https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK</DebControlHomepage>
<!-- 配置放入到 DEBIAN\control 檔案的 Description 屬性。如不填寫,預設將使用 Description 屬性的值 -->
<DebControlDescription>The file downloader.</DebControlDescription>
<!-- 配置放入到 DEBIAN\control 檔案的 Depends 屬性。如不填寫,則忽略。用於配置軟體依賴,比如填寫入 vlc,libvlc-dev 即可在宣告安裝包依賴 vlc 元件 -->
<DebControlDepends></DebControlDepends>
<!-- 應用名,英文名。將作為 opt\apps\${AppId}\entries\applications\${AppId}.desktop 和 opt\apps\${AppId}\info 的 Name 屬性的值,不寫預設和 AssemblyName 屬性相同 -->
<AppName>UnoFileDownloader</AppName>
<!-- 應用名,中文名,可不寫。將在開始選單中顯示 -->
<AppNameZhCN>下載器</AppNameZhCN>
<!-- 配置放入到 opt\apps\${AppId}\info 檔案的 permissions 屬性,可不寫,可開啟的屬性之間使用分號 ; 分割。可選值有:autostart, notification, trayicon, clipboard, account, bluetooth, camera, audio_record, installed_apps 等。預設為不開啟任何許可權 -->
<InfoPermissions>autostart;notification;trayicon;clipboard;account</InfoPermissions>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Categories 屬性,可選值有:AudioVideo, Audio, Video, Development, Education, Game, Graphics, Network, Office, Science, Settings, System, Utility, Other 等。預設 為 Other 的值 -->
<DesktopCategories>Other</DesktopCategories>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Keywords 屬性,作為程式的通用關鍵搜尋詞,當在啟動器中搜尋該詞而非程式名稱時,即可索引出該程式的快捷方式。多個關鍵詞之間使用分號 ; 分割,關鍵詞使用英文。如需新增 中文關鍵詞,請設定 DesktopKeywordsZhCN 屬性。預設為 deepin 的值 -->
<DesktopKeywords>deepin;downloader</DesktopKeywords>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Keywords[zh_CN] 屬性,可不填,作為程式的 通用關鍵搜尋詞,當在啟動器中搜尋該詞而非程式名稱時,即可索引出該程式的快捷方式。多個關鍵詞之間使用分號 ; 分割,關鍵詞使 用中文 -->
<DesktopKeywordsZhCN>工具;下載器</DesktopKeywordsZhCN>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Comment 屬性,作為關於本程式的通用簡述, 在沒有單獨設定語言引數的情況下,預設顯示該段內容。不填將使用 UOSAppId 屬性的值 -->
<DesktopComment>The file downloader.</DesktopComment>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Comment[zh_CN] 屬性,作為關於本程式的通用中文簡述,可不填 -->
<DesktopCommentZhCN>這是一個下載器</DesktopCommentZhCN>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 NoDisplay 屬性,如果設定為 true 則表示當 前的應用不放在開始選單裡面,即在開始選單隱藏應用。一般用於一些不想讓使用者直接碰到的,直接執行的應用。可不填,預設是 false 的值 -->
<DesktopNoDisplay>false</DesktopNoDisplay>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Exec 屬性,作為程式的啟動命令,可不填,且推薦不填,除非有特殊需求。預設為 /opt/apps/${AppId}/files/bin/${AssemblyName} 的值 -->
<DesktopExec>/opt/apps/$(AppId)/files/bin/$(AssemblyName)</DesktopExec>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Icon 屬性,作為程式的圖示,可不填,且推薦不填,除非有特殊需求。預設為 UOSAppId 的值 -->
<DesktopIcon>$(UOSAppId)</DesktopIcon>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Type 屬性,作為程式的型別,按照 UOS 的規 範,必須為 Application 的值,推薦不更改,即不填 -->
<DesktopType>Application</DesktopType>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 Terminal 屬性,用來決定程式是否以終端的形式執行,預設是 false 關閉狀態 -->
<DesktopTerminal>false</DesktopTerminal>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 StartupNotify 屬性,用來決定程式是否允許 桌面環境跟蹤應用程式的啟動,提供使用者反饋和其他功能。例如滑鼠的等待動畫等,按照 UOS 規範建議,為保障應用使用體驗,預設是 true 開啟狀態,推薦不更改,即不填 -->
<DesktopStartupNotify>true</DesktopStartupNotify>
<!-- 配置放入到 opt\apps\${AppId}\entries\applications\${AppId}.desktop 檔案的 MimeType 屬性,用來配置程式支援的關聯檔案型別,根據實際需求來填寫。如果沒有需要支援關聯檔案,則不填。多個檔案型別之間使用分號 ; 分割 -->
<DesktopMimeType>audio/aac;application/aac;</DesktopMimeType>
<!-- 進行打包的資料夾,用來組織打包的檔案。可不填,且推薦不填,將被打包工具自動填充 -->
<PackingFolder>obj\DebUOSPacking\Packing\</PackingFolder>
<!-- 工作資料夾,用來存放打包過程中的臨時檔案。可不填,且推薦不填,將被打包工具自動填充 -->
<WorkingFolder>obj\DebUOSPacking\</WorkingFolder>
<!-- 專案的釋出輸出資料夾。可不填,且推薦不填,將被打包工具自動填充 -->
<ProjectPublishFolder>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(PublishDir)))</ProjectPublishFolder>
<!-- 打包輸出檔案路徑。可不填,預設將放在釋出資料夾裡 -->
<DebUOSOutputFilePath>bin\Foo.deb</DebUOSOutputFilePath>
<!-- 表示圖示資料夾路徑,資料夾裡面按照 UOS 的 deb 規範組織圖示檔案,資料夾裡面存放的內容將會被原原本本複製到 opt/apps/${AppId}/entries/icons/ 資料夾裡面。此屬性屬於高階配置,一般不需要使用,可以用來滿足更多的定製化需求。預設不填,且推薦在 充分理解 UOS 的 deb 規範的情況下再進行使用。此屬性存在值時,將會忽略 SvgIconFile 和 Png16x16IconFile 等屬性的設定 -->
<UOSDebIconFolder>Assets\Icons\</UOSDebIconFolder>
<!-- 應用圖示檔案,表示向量圖示檔案。將被放入到 opt/apps/${AppId}/entries/icons/hicolor/scalable/apps/${appid}.svg 裡面 。向量圖示檔案與 png 非向量格式二選一,如果同時存在,優先使用向量圖示檔案。
當 UOSDebIconFolder 屬性存在值時,本屬性設定無效 -->
<SvgIconFile>Assets\Icons\Logo.svg</SvgIconFile>
<!-- 應用圖示檔案,表示 png 非向量格式檔案。將被放入到 opt/apps/${AppId}/entries/icons/hicolor/${解析度}/apps/${appid}.png 裡面。請確保實際圖片解析度正確,且是 png 格式。向量圖示檔案與 png 非向量格式二選一,如果同時存在,優先使用向量圖示文 件。
當 UOSDebIconFolder 屬性存在值時,本屬性設定無效 -->
<Png16x16IconFile>Assets\Icons\Logo16x16.png</Png16x16IconFile>
<!-- 打包時應該有哪些字尾被排除,預設包括 .pdb .dbg .md 檔案
如果有其他特殊規則,請自行編寫 Target 在 CreateDebUOS 之前刪除掉 -->
<ExcludePackingDebFileExtensions>.pdb;.dbg;.md</ExcludePackingDebFileExtensions>
FAQ
如何在 deb 包裡面新增符號 pdb 檔案
新增 ExcludePackingDebFileExtensions 屬性配置,重新指定打包時應該有哪些字尾被排除。因為預設的 ExcludePackingDebFileExtensions 屬性包含了 .pdb .dbg .md 檔案,因此符號 pdb 檔案將被排除
<PropertyGroup>
<ExcludePackingDebFileExtensions>.dbg;.md</ExcludePackingDebFileExtensions>
</PropertyGroup>
如何新增更多檔案加入 deb 打包裡
一般情況下,能夠輸出到釋出路徑的,就能加入到 deb 包裡面。比如在 csproj 配置某些檔案如果較新則複製等
如果需要動態編寫構建邏輯,則可在 Publish 之後,在 CreateDebUOS 之前,進行動態加入檔案。如以下例子,新增的是構建資訊 Version.txt 檔案到打包的 deb 裡面
<Target Name="_BuildVersionInfoTarget" BeforeTargets="CreateDebUOS" DependsOnTargets="Publish">
<PropertyGroup>
<BuildVersionInfoFile>$([System.IO.Path]::Combine($(PublishDir), "Version.txt"))</BuildVersionInfoFile>
<BuildTimeInfo>$([System.DateTimeOffset]::get_Now().ToString())</BuildTimeInfo>
</PropertyGroup>
<ItemGroup>
<BuildVersionInfoWriteArgLine Include=">" />
<BuildVersionInfoWriteArgLine Include="GitCommit" />
<BuildVersionInfoWriteArgLine Include="$(GitCommit)" />
<BuildVersionInfoWriteArgLine Include=">" />
<BuildVersionInfoWriteArgLine Include="BuildTime" />
<BuildVersionInfoWriteArgLine Include="$(BuildTimeInfo)" />
<BuildVersionInfoWriteArgLine Include=">" />
</ItemGroup>
<WriteLinesToFile File="$(BuildVersionInfoFile)" Lines="@(BuildVersionInfoWriteArgLine)" Overwrite="true" />
</Target>
<Target Name="_GitCommit" Returns="$(GitCommit)" BeforeTargets="_BuildVersionInfoTarget" Condition="'$(GitCommit)' == ''">
<Exec Command="git rev-parse HEAD" EchoOff="true" StandardErrorImportance="low" StandardOutputImportance="low" ConsoleToMSBuild="true" ContinueOnError="true" StdOutEncoding="utf-8">
<Output TaskParameter="ConsoleOutput" PropertyName="GitCommit" />
<Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
</Exec>
</Target>
如何新增 vlc 依賴
在 PropertyGroup 裡的 DebControlDepends 屬性的新增 vlc,libvlc-dev
依賴,程式碼如下
<PropertyGroup>
<!-- 軟體的依賴包
vlc,libvlc-dev 依賴原因:https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/docs/linux-setup.md -->
<DebControlDepends>vlc,libvlc-dev</DebControlDepends>
</PropertyGroup>
由於 LibVLCSharp 難以維護 Linux 複雜的 VLC 版本,因此軟體帶 VLC 是推薦宣告依賴。宣告依賴之後,將在安裝 deb 安裝包的時候要求依賴負載。如使用 dpkg 命令,則在缺失依賴時不給安裝,且給出其依賴說明。如使用圖形介面的安裝器,比如麒麟系統的 kylin-installer 安裝器,一般都會自動從軟體包源安裝依賴