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

重要

如果您想要提交應用程式至 Microsoft Store,您需要連絡Windows 開發人員支援,並取得核准使用資產套件和套件摺疊。

資產套件可以減少應用程式整體封裝大小和發佈至 Microsoft Store 的時間。 您可以在資產套件簡介深入了解資產套件,以及了解它如何加速您的開發反覆運算。

如果您正在考慮將資產套件用於應用程式或已經知道要使用它,您可能想知道資產套件如何變更開發程序。 簡言之,應用程式開發保持不變,這可能是因為資產套件的套件摺疊。

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

若要了解套件摺疊如何不會影響您的開發程序,讓我們首先回來了解當您將應用程式分成多個套件(使用資產套件或資源套件)時的行為。

從高階角度來看,分割部分應用程式檔案為其他套件(不是架構套件),您將無法從程式碼執行的相對位置存取直接這些檔案。 這是因為這些套件的安裝目錄不同於架構套件的安裝位置。 例如,如果您正在進行遊戲,而您的遊戲已當地語系化為法文和德文,而且您是針對 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.LOG Api 可以自動從已安裝的語言中選取最適當的檔案,您可以在 Windows 找到有關 MRT.LOG Api 的詳細資訊。ApplicationModel。 或者,您可以使用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資料夾和檔案於套件摺疊期間合併至AudiosVideos資料夾。 一般規則是,為對應檔案中的封裝檔案或 MakeAppx.exe 的封裝配置指定的相對路徑,是套件摺疊之後應該用來存取它們的路徑。

最後,如果不同資產套件中的兩個檔案有相同相對路徑,這會造成套件摺疊期間的衝突。 發生衝突時,應用程式部署會導致錯誤及失敗。 此外,因為套件摺疊利用永久連結,如果您使用資產套件,應用程式將無法部署至非 NTFS 磁碟機。 如果您知道使用者可能會將您的應用程式移到抽取式磁碟機,您不應該使用資產套件。