資產套件簡介
重要
如果您想要將應用程式提交至市集,您必須連絡 Windows 開發人員支援 人員,並取得使用資產套件的核准。
資產套件是一種套件類型,可作為應用程式一般檔案的集中式位置,有效地消除了整個架構套件中重複檔案的必要性。 資產套件與資源套件類似,其設計目的是包含應用程式執行所需的靜態內容,但不論使用者的系統架構、語言或顯示縮放比例為何,所有資產套件都一律會下載不同。
因為資產套件包含所有架構、語言和無從驗證檔案,因此利用資產套件會導致整體封裝的應用程式大小降低(因為這些檔案不再重複),協助您管理大型應用程式的本機開發磁碟空間使用量,並一般管理應用程式的套件。
資產套件如何影響發佈?
資產套件最明顯的優點是已封裝應用程式的大小降低。 較小的應用程式套件可讓市集處理較少的檔案,以加速應用程式的發佈程式;不過,這不是資產套件最重要的優點。
建立資產套件時,您可以指定是否應該允許封裝執行。 由於資產套件應該只包含與架構無關的檔案,因此通常不會包含任何 .dll 或 .exe 檔案,因此對於資產套件通常不需要執行。 這項區別的重要性在於,在發佈程式期間,必須掃描所有可執行套件,以確保它們不包含惡意程式碼,而且此掃描程式需要較長的時間才能用於較大的套件。 不過,如果將套件指定為非可執行檔,則應用程式的安裝將確保無法執行此套件中包含的檔案。 這項保證可免除完整套件掃描的需求,而且會大幅減少發佈應用程式期間惡意程式碼掃描時間(以及更新也一樣),因此,對於使用資產套件的應用程式來說,發佈速度會大幅加快。 請注意, 一般套件組合應用程式套件 也必須用來取得此發佈權益,因為這是可讓市集平行處理每個 .appx 或 .msix 套件檔案的內容。
我應該使用資產套件嗎?
更新應用程式的檔案結構以利用資產套件的使用,可能會產生有形的好處:減少套件大小和更精簡的開發反復專案。 如果您的架構套件全都包含大量一般檔案,或大部分的應用程式是由非執行中的檔案所組成,強烈建議您投入額外的時間來轉換至使用資產套件。
不過,應注意資產套件不是達成應用程式內容選擇性的方法。 資產套件檔案是非選擇性 的,無論目標裝置的架構、語言或縮放比例為何,一律 會下載 - 任何您想要您的應用程式支援的選擇性內容都應該使用 選用套件 來實作。
如何建立資產套件
建立資產套件最簡單的方式是使用封裝配置。 不過,您也可以使用 MakeAppx.exe 手動建立資產套件。 若要指定要包含在資產套件中的檔案,您必須建立「對應檔案」。 在此範例中,資產套件中唯一的檔案是 「Video.mp4」,但所有資產套件的檔案都應該列在這裡。 請注意, ResourceMetadata 中的 ResourceDimensions 規範會省略資產套件(相較于資源套件的對應檔)。
[ResourceMetadata]
"ResourceId" "Videos"
[Files]
"Video.mp4" "Video.mp4"
使用下列其中一個命令,使用 MakeAppx.exe 建立資產套件(適用于 MSIX 和 .appx)。
MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.appx
MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.msix
這裡應該注意到 AppxManifest (標誌檔案) 中參考的所有檔案都無法移至資產套件中 – 這些檔案必須跨架構套件重複。
資產套件不應包含 resources.pri;MRT 無法用來存取資產套件檔案。 若要深入瞭解如何存取資產套件檔案,以及為何資產套件需要將您的應用程式安裝到 NTFS 磁片磁碟機,請參閱 使用資產套件和套件折迭 進行開發。
若要控制是否允許執行資產套件,您可以在 AppxManifest 的 Properties 元素中使用 uap6:AllowExecution 您也必須將 uap6 新增 至最上層 Package 元素,才能成為下列專案:
<Package IgnorableNamespaces="uap uap6"
xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">
如果未指定,AllowExecution 的 預設值為 true –針對沒有可執行檔的資產套件,將它 設定為 false ,讓發佈速度更快。