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

来源:https://www.cnblogs.com/lindexi/p/17995729
-Advertisement-
Play Games

寫在前面 主要使用軟體: 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="&gt;" />
      <BuildVersionInfoWriteArgLine Include="GitCommit" />
      <BuildVersionInfoWriteArgLine Include="$(GitCommit)" />
      <BuildVersionInfoWriteArgLine Include="&gt;" />

      <BuildVersionInfoWriteArgLine Include="BuildTime" />
      <BuildVersionInfoWriteArgLine Include="$(BuildTimeInfo)" />
      <BuildVersionInfoWriteArgLine Include="&gt;" />
    </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])。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • docker安裝普羅米修斯+Granfan並監控容器 一、基本概念 ​ 1、之間的關係 ​ prometheus與grafana之間是相輔相成的關係。作為完美的分散式監控系統的Prometheus,就想布加迪威龍一樣示例和動力強勁。在猛的車也少不了儀錶盤來觀察。於是優雅的可視化平臺Grafana出現 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是JLink命令行以及JFlash對於下載演算法的作用地址範圍認定。 最近痞子衡在給一個 RT1170 客戶定製一個 Infineon MirrorBit 類型 64MB Flash 的 SEGGER 下載演算法,做完之後在 JFlash 下 ...
  • 寫在前面 本隨筆是非常菜的菜雞寫的。如有問題請及時提出。 可以聯繫:[email protected] GitHhub:https://github.com/WindDevil (目前啥也沒有 編程題 第一題 擴展內核,能夠顯示操作系統切換任務的過程。 首先先回憶一下操作系統切換任務的過程. 因此只 ...
  • 【新品發佈】正點原子ZYNQ7015開發板發佈!ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2,性能強悍,資料豐富! 正點原子Z15 ZYNQ開發板,搭載Xilinx Zynq7000系列晶元,核心板主控晶元的型號是XC7Z015CLG485-2。開發板由核心板+底板組成,外設資源豐 ...
  • 編寫樹莓派內核映像的過程可以等同於gcc的編譯過程:預處理、編譯、彙編、鏈接,後面還會加一步:將可執行文件轉換成二進位的鏡像文件。 在MakeFile里的構建過程分為3步: 1.將.c文件經過預處理、編譯、彙編生成.o文件,將.S文件經過彙編生成.o文件。 2.將.o文件經過鏈接生成.elf可執行文 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...