使用資產套件與套件摺疊進行開發

重要

如果您想要將應用程式提交至市集,您需要連絡 Windows 開發人員支援 人員,並取得核准以使用資產套件和套件折迭。

資產套件可以降低應用程式的整體封裝大小和發佈時間至市集。 您可以在資產套件 簡介中深入瞭解資產套件,以及如何加速開發反復 專案。

如果您要考慮將資產套件用於您的應用程式,或已經知道您想要使用它,您可能想知道資產套件如何變更您的開發程式。 簡言之,應用程式開發會維持不變-這是可能的,因為資產套件的套件折迭。

分割應用程式之後的檔案存取

若要瞭解套件折迭如何影響您的開發程式,讓我們先退一步瞭解當您將應用程式分割成多個套件時會發生什麼情況(使用資產套件或資源套件)。

概括而言,當您將部分應用程式的檔案分割成其他套件(不是架構套件)時,您將無法直接存取這些檔案,相對於程式碼執行的位置。 這是因為這些套件全都安裝到安裝架構套件的不同目錄中。 例如,如果您要製作遊戲,且您的遊戲已當地語系化為法文和德文,且您同時針對 x86 和 x64 電腦所建置,則您應該在遊戲的應用程式套件組合內有這些應用程式套件檔案:

  • MyGame_1.0_x86.appx
  • MyGame_1.0_x64.appx
  • MyGame_1.0_language-fr.appx
  • MyGame_1.0_language-de.appx

當您的遊戲安裝到使用者的機器時,每個應用程式套件檔案都會在 WindowsApps 目錄中有自己的資料夾 。 因此,對於執行 64 位 Windows 的法國使用者,您的遊戲看起來會像這樣:

C:\Program Files\WindowsApps\
|-- MyGame_1.0_x64
|   `-- …
|-- MyGame_1.0_language-fr
|   `-- …
`-- …(other apps)

請注意,不適用於使用者的應用程式套件檔案將不會安裝(x86 和德文套件)。

針對此使用者,遊戲的主要可執行檔將會位於 MyGame_1.0_x64 資料夾中,而且會從該資料夾執行,而且通常只有此資料夾中的檔案存取權。 若要存取 MyGame_1.0_language-fr 資料夾中的 檔案,您必須使用 MRT API 或 PackageManager API。 MRT API 可以從安裝的語言自動選取最適當的檔案,您可以在 Windows.ApplicationModel.Resources.Core 深入瞭解 MRT API 。 或者,您可以使用 PackageManager 類別 找到法文語言套件 的已安裝位置。 您不應該假設您應用程式的套件已安裝位置,因為這可能會變更,而且使用者之間可能會有所不同。

資產套件折迭

那麼,如何存取資產套件中的檔案? 此外,您可以繼續使用您用來存取架構套件中任何其他檔案的檔案存取 API。 這是因為資產套件檔案會在透過套件折迭程式安裝時折迭到您的架構套件中。 此外,由於資產套件檔案原本應該是架構套件內的檔案,這表示當您從鬆散檔案部署移至開發程式中的封裝部署時,就不需要變更 API 使用量。

若要深入瞭解套件折迭的運作方式,讓我們從範例開始。 如果您有具有下列檔案結構的遊戲專案:

MyGame
|-- Audios
|   |-- Level1
|   |   `-- ...
|   `-- Level2
|       `-- ...
|-- Videos
|   |-- Level1
|   |   `-- ...
|   `-- Level2
|       `-- ...
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe

如果您想要將遊戲分割成 3 個套件:x64 架構套件、音訊的資產套件,以及影片的資產套件,您的遊戲將會分成下列套件:

MyGame_1.0_x64.appx
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe
MyGame_1.0_Audios.appx
`-- Audios
    |-- Level1
    |   `-- ...
    `-- Level2
        `-- ...
MyGame_1.0_Videos.appx
`-- Videos
    |-- Level1
    |   `-- ...
    `-- Level2
        `-- ...

當您安裝遊戲時,會先部署 x64 套件。 然後,這兩個資產套件仍會部署到自己的資料夾,就像先前範例中的 MyGame_1.0_language-fr 一樣 。 不過,由於封裝折迭,資產套件檔案也會硬式連結,使其出現在 MyGame_1.0_x64 資料夾中(因此即使檔案出現在兩個位置,它們也不會佔用兩倍的磁碟空間)。 資產套件檔案出現在其中的位置,正是它們相對於封裝根目錄的位置。 因此,以下是已部署遊戲的最終版面配置:

C:\Program Files\WindowsApps\
|-- MyGame_1.0_x64
|   |-- Audios
|   |   |-- Level1
|   |   |   `-- ...
|   |   `-- Level2
|   |       `-- ...
|   |-- Videos
|   |   |-- Level1
|   |   |   `-- ...
|   |   `-- Level2
|   |       `-- ...
|   |-- Engine
|   |   `-- ...
|   |-- XboxLive
|   |   `-- ...
|   `-- Game.exe
|-- MyGame_1.0_Audios
|   `-- Audios
|       |-- Level1
|       |   `-- ...
|       `-- Level2
|           `-- ...
|-- MyGame_1.0_Videos
|   `-- Videos
|       |-- Level1
|       |   `-- ...
|       `-- Level2
|           `-- ...
`-- …(other apps)

針對資產套件使用封裝折迭時,您仍然可以以相同方式存取已分割成資產套件的檔案(請注意,架構資料夾的結構與原始專案資料夾完全相同),而且您可以在資產套件之間新增資產套件或移動檔案,而不會影響您的程式碼。

現在,針對更複雜的封裝折迭範例。 假設您想要改為根據層級分割檔案,而且如果您想要保留與原始專案資料夾相同的結構,您的套件看起來應該像這樣:

MyGame_1.0_x64.appx
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe
MyGame_Level1.appx
|-- Audios
|   `-- Level1
|       `-- ...
`-- Videos
    `-- Level1
        `-- ...

MyGame_Level2.appx
|-- Audios
|   `-- Level2
|       `-- ...
`-- Videos
    `-- Level2
        `-- ...

這可讓 MyGame_Level1套件中的 Level1 資料夾和檔案,以及 MyGame_Level2 套件中的 Level2 資料夾和檔案在封裝折迭期間合併到 Audios Videos 資料夾中。 因此,一般規則是對應檔案或 MakeAppx.exe 封裝配置 中針對封裝檔案所指定的相對路徑,是您在封裝折迭之後應該用來存取它們的路徑。

最後,如果不同資產套件中有兩個檔案具有相同相對路徑,這會導致封裝折迭期間發生衝突。 如果發生衝突,應用程式的部署將會導致錯誤並失敗。 此外,因為套件折迭會利用硬式連結,如果您確實使用資產套件,您的應用程式將無法部署到非 NTFS 磁片磁碟機。 如果您知道您的應用程式可能會由您的使用者移至卸載式磁片磁碟機,則您不應該使用資產套件。