最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【UWP開發(fā)】Optional Package中的Related Set的創(chuàng)建方法

2021-07-18 19:30 作者:CQInfo  | 我要投稿

在UWP開發(fā)中,我們可以通過Optional Package來獨立分發(fā)我們的資源文件,程序組件等內(nèi)容。XBOX里面的游戲用到的DLC,實際就是使用這項技術(shù)??傊暮锰幎喽啵热缈梢跃喕覀兊闹鞒绦虺叽?,實現(xiàn)插件系統(tǒng),動態(tài)內(nèi)容分發(fā)等。

在微軟的官方文檔中會提到一個叫做Related Set的概念,它利用一個文本文件來映射Main Package和Optional Packae(OP)之間的關(guān)系。但是實際上它并不是使用OP必備的條件,至少在我們本地開發(fā)中是這樣。

如果需要實現(xiàn)如下功能,我們就需要定義我們自己的Related Set

  • Main Package和Optional Package之間需要版本關(guān)聯(lián)

  • Main Package 需要加載Optional Package 中的代碼(DLL)

其他下情況下,則并不需要定義Related Set(至少本地調(diào)試是這樣)

  • Main Package 需要加載 Optional Package 中的資源文件,比如圖片,視頻等

1. 使用Optional Pacakage中的資源文件

如果OP只是用來承載資源文件,我們可以直接利用VS里面的C# UWP Optional Package工程模板來創(chuàng)建OP工程,然后把我們需要的資源文件添加到工程中,并且確保添加的文件的屬性是"內(nèi)容(Content)"。

在OP工程的Package.Appxmanifest文件中,要確保MainPackageDependency填寫正確,是Main Package的Identity name.

如果希望創(chuàng)建一個C++ 的OP 工程,可以直接創(chuàng)建 C++ 的UWP工程,然后手動修改Package.Appxmanifest。

在Main Package中,我們使用Windows.ApplicationModel.Package.Dependencies API 找到OP,然后用 UWP 文件API讀取資源文件即可。

2.?使用Optional?Pacakage中的(C++)代碼

在Main Pacakge中可以通過LoadPackagedLibrary來加載 OP中的DLL,exe等。但是經(jīng)過實測發(fā)現(xiàn),如果不創(chuàng)建Related?Set,LoadPackagedLibrary就不能正常工作,會有找不到指定文件的錯誤提示。如下介紹兩種Related Set創(chuàng)建方法。

#1 在Main Package工程中添加 ”Bundle.MApping.txt“?文件

要確保文件名一定是 ”Bundle.MApping.txt“ 并且文件屬性是 ”內(nèi)容(Content)“,因為這樣才能被正確識別。

結(jié)構(gòu)實際很簡單,里面的文件路徑是相對路徑,指OP的工程文件相對于MApping文件的路徑。

創(chuàng)建完MApping文件后,就可以在VS中來調(diào)試我們的Main Package 和OP了。重新編譯整個工程的時候,我們能在VS的輸出窗口看到OP的工程也被編譯了,即使之前并沒有手動添加修改過Main Pacakge的Build Depedency.

同樣,如果需要用VS來創(chuàng)建UWP安裝包(AppX,MSIX),mApping文件也一樣有效,但是有兩點需要注意:

  1. 確保給Main Pacakge工程和 OP 工程都添加了PFX證書,因為沒有被簽名的AppX安裝包是無法被本地安裝的;

  2. 確保在創(chuàng)建Main Package 的安裝包時,選擇的App Bundle方式是Always,這樣就能生成捆綁包(AppxBundle,MsixBundle),否則我們的Related Set就失效了

#2 使用MakeAppx.exe手動創(chuàng)建Related?Set

可以先生成Main Package 和OP的安裝包,而且最好對安裝包完成簽名,不過這些VS的Publish向?qū)Чぞ叨伎梢詭椭覀兺瓿伞?/span>

為了方便,我把需要用到的所有文件放在一個統(tǒng)一的文件夾下面,(在我的Sample工程中該文件夾為MSIX)

需要注意,我們用到的Main Package安裝包一定是MSIX或者AppX格式,不能帶有Bundle后綴,否則MakeAppx.exe不能處理。所以要求我們在生成Main Pacakge安裝包時在App Bundle選項處選擇 ”Never“,如下圖

App Bundle

在相同目錄下創(chuàng)建mApping.txt

注意,F(xiàn)iles下面指定Main Package,ExternalPackages下面指定我們需要的OP.

每一個AppX或者M(jìn)SIX用一行聲明,第一個引號內(nèi)容是AppX的相對位置,第二個引號內(nèi)容是文件名稱,兩個引號內(nèi)容中間是空格,不是換行!

準(zhǔn)備好mApping.txt文件后,就可以使用MakeAppx.exe創(chuàng)建帶有Related Set信息的Appx Bundle了,使用如下命令:

注意,

  • makeAppx.exe隨Windows SDK KIT 分發(fā),不同版本在不同目錄。

  • my.Appxbundle是輸出的安裝包名稱,里面只包含Main Package和用于定義Related Set的XML文件,OP并不包含在里面,使用OP時需要單獨安裝。

最后,一般還需要對my.Appxbundle簽名,才能安裝到用戶機器。

這樣就生成了帶有Related Set信息的安裝包。


使用兩種不同的方式添加Related Set, 最終生成的安裝包都是Appxbundle或者msixbundle這種捆綁包的形式。因為Related Set的關(guān)系被定義在一個叫做AppxBundleManifest.xml 的文件中,這個文件被添加在bundle安裝包的的AppxMetadata目錄下面。兩種方法生成的?AppxBundleManifest 文件實際一樣,如下:

在安裝這個帶有AppxBundleManifest文件的Bundle安裝包時,該文件會被AppInstaller安裝到用戶機器,然后我們的Main Packae在運行時,就可以根據(jù)這個文件找到需要的OP,并且調(diào)用OP中的代碼。

經(jīng)過我的實際測試,這個文件會被安裝到如下目錄:

其中的”2021.718.1053.0“ 正是?AppxBundleManifest.xml里面的版本號。

通過如上兩種方式添加Related Set后,就可以在我們的Main Pacakge中通過 LoadPacakgeLibrary API 加載OP中的DLL了。


Sample Code

https://github.com/cjw1115/OptionalPacakge

參考文檔

https://docs.microsoft.com/en-us/archive/blogs/Appinstaller/tooling-to-create-a-related-set

https://github.com/AppInstaller/OptionalPackageSample


【UWP開發(fā)】Optional Package中的Related Set的創(chuàng)建方法的評論 (共 條)

分享到微博請遵守國家法律
雷山县| 江川县| 江城| 岐山县| 冀州市| 天全县| 鲁山县| 尼玛县| 永靖县| 梨树县| 清新县| 新蔡县| 邵东县| 那坡县| 武定县| 新竹县| 临海市| 尼木县| 汤阴县| 太谷县| 宁波市| 泌阳县| 定日县| 铜山县| 横峰县| 郴州市| 怀来县| 都昌县| 贺州市| 邯郸县| 苏尼特左旗| 石台县| 金阳县| 洞头县| 禹州市| 策勒县| 佛学| 施秉县| 阳泉市| 平乡县| 桂东县|