寫在前面 主要使用軟體: VMware Workstation Pro17 Navicat Premium17 Xshell7 Xftp7 1.在虛擬機安裝CentOS7 訪問阿裡雲鏡像站 ,選擇標記鏡像文件下載 打開虛擬機VMware,新建虛擬機 點擊“新CD/DVD”,“使用ISO映像文件”,設 ...
Packaging.DebUOS 是我所在的團隊開發開源的一款專門用在為 dotnet 的應用製作成為符合要求的 UOS 統信系統軟體安裝包的工具,此工具可以輔助開發者使用現有的工具鏈經過簡單的配置即可完成安裝包的製作
設計思想
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 交流
參考文檔
感謝
如使用過程有問題,歡迎加入國產應用開發群交流: 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 安裝器,一般都會自動從軟體包源安裝依賴
博客園博客只做備份,博客發佈就不再更新,如果想看最新博客,請訪問 https://blog.lindexi.com/
如圖片看不見,請在瀏覽器開啟不安全http內容相容
本作品採用知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發佈,但務必保留文章署名[林德熙](https://www.cnblogs.com/lindexi)(包含鏈接:https://www.cnblogs.com/lindexi ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我[聯繫](mailto:[email protected])。