建立和轉換來源內容群組對應

若要讓應用程式準備好進行串流安裝,您必須建立內容群組對應。 此文章將協助您了解建立和轉換內容群組對應時所需要的詳細資訊,以及提供一些過程中的秘訣與技巧。

建立來源內容群組對應

您將需要建立一個 SourceAppxContentGroupMap.xml 檔案,並使用 Visual Studio 或 MakeAppx.exe 工具將此檔案轉換為最終版本︰AppxContentGroupMap.xml。 雖然您可以藉由直接建立 AppxContentGroupMap.xml 來省略一些步驟,但我們仍建議 (通常也會比較容易) 您先建立 SourceAppxContentGroupMap.xml 並進行轉換,因為在 AppxContentGroupMap.xml 中並不允許使用萬用字元 (但萬用字元能帶來極大的幫助)。

讓我們逐步解說一個簡單的案例,其中應用程式串流安裝很有説明。

假設您已建立遊戲,但最終應用程式的大小超過 100 GB。 這需要很長的時間才能從Microsoft Store下載,這可能不方便。 如果您選擇使用應用程式串流安裝,您可以指定下載應用程式檔案的順序。 藉由告訴市集先下載必要檔案,使用者就可以提早進入您的應用程式,並在背景繼續下載其他非必要的檔案。

注意

使用應用程式串流安裝高度依賴應用程式的檔案組織。 建議您考慮應用程式的內容配置,以儘快安裝應用程式串流,讓應用程式的檔案區隔更簡單。

首先,我們會建立一個 SourceAppxContentGroupMap.xml 檔案。

在我們進一步討論細節之前,以下是一個已經完成的簡易 SourceAppxContentGroupMap.xml 檔案︰

<?xml version="1.0" encoding="utf-8"?>  
<ContentGroupMap xmlns="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap" 
                 xmlns:s="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap"> 
    <Required>
        <ContentGroup Name="Required">
            <File Name="StreamingTestApp.exe"/>
        </ContentGroup>
    </Required>
    <Automatic>
        <ContentGroup Name="Level2">
            <File Name="Assets\Level2\*"/>
        </ContentGroup>
        <ContentGroup Name="Level3">
            <File Name="Assets\Level3\*"/>
        </ContentGroup>
    </Automatic>
</ContentGroupMap>

內容群組對應有兩個主要元件: 必要 區段,其中包含必要的內容群組,以及可包含多個自動內容群組的 自動 區段。

必要內容群組

必要內容群組是位於 SourceAppxContentGroupMap.xml<Required> 元素下的單一內容群組。 必要內容群組應包含所有啟動應用程式所必要的檔案,並提供最低限度的使用者體驗。 由於受 .NET Native 編譯的限制,所有程式碼 (應用程式可執行檔) 都必須是必要群組的一部分,並將資產和其他檔案留在自動群組之中。

例如:若您的應用程式是一款遊戲,則必要群組中就必須包括主功能表或遊戲主畫面所需要的所有檔案。

以下是我們原始 SourceAppxContentGroupMap.xml 範例檔案的程式碼片段︰

<Required>
    <ContentGroup Name="Required">
        <File Name="StreamingTestApp.exe"/>
    </ContentGroup>
</Required>

在這裡有幾件重要的事情值得注意︰

  • 元素 <ContentGroup> 內的 <Required>必須 命名為 「必要」。此名稱僅保留給必要的內容群組,且無法與最終內容群組對應中的其他任何專案 <ContentGroup> 搭配使用。
  • 只有一個 <ContentGroup>。 這是刻意的,因為檔案中應該只能有一個必要檔案群組。
  • 在這個範例中的檔案是一個 .exe 檔案。 必要內容群組中不一定只能有一個檔案。您可以在群組中添加數個檔案。

要開始撰寫此檔案的簡便方法,就是在您最愛的文字編輯器中開啟一個新的頁面,快速執行 \[另存新檔\] 並將檔案儲存至您應用程式的專案資料夾中,然後將您剛建立的檔案命名為︰SourceAppxContentGroupMap.xml

重要

如果您要開發 C++ 應用程式,則必須調整 的 SourceAppxContentGroupMap.xml 檔案屬性。 將 Content 屬性設定為 True,並將 File Type 屬性設定為 XML 檔案

當您在建立 SourceAppxContentGroupMap.xml 的時候,在檔案名稱中使用萬用字元將會很有幫助。如需詳細資訊,請參閱使用萬用字元的秘訣與技巧區段。

若您使用 Visual Studio 開發您的應用程式,我們建議您在必要內容群組中增加下列內容︰

<File Name="*"/>
<File Name="WinMetadata\*"/>
<File Name="Properties\*"/>
<File Name="Assets\*Logo*"/>
<File Name="Assets\*SplashScreen*"/>

新增檔案名稱僅為一個萬用字元的檔案,會將 Visual Studio 新增至您專案資料夾中的所有檔案包括在內,例如:應用程式可執行檔,或 DLL 檔案。 WinMetadata 和 Properties 資料夾則是為了將其他 Visual Studio 產生的資料夾也包含在內。 Assets 萬用字元則是為了選取能讓應用程式順利安裝的必要 Logo 和 SplashScreen 影像。

請注意:您無法在檔案結構的根目錄中使用雙萬用字元「**」包含專案中的所有檔案,因為當您嘗試將 SourceAppxContentGroupMap.xml 轉換為最終的 AppxContentGroupMap.xml 時將會失敗。

請務必記得足跡檔案 (AppxManifest.xml、AppxSignature.p7x、resources.pri 等) 也不應該包含在內容群組對應之中。 若足跡檔案包含在您所指定的萬用字元檔案名稱之中,則系統會忽略他們。

自動內容群組

自動內容群組是在使用者與已經下載完成的內容群組互動時,於背景繼續下載的資產。 其中包含了啟動應用程式所不需要的任何額外檔案。 例如:您可以將自動內容群組分為幾個不同層級,將每個層級定義為不同的內容群組。 如必要內容群組區段中所述︰由於受 .NET Native 編譯的限制,所有程式碼 (應用程式可執行檔) 都必須是必要群組的一部分,並將資產和其他檔案留在自動群組之中。

讓我們更仔細的觀察我們 SourceAppxContentGroupMap.xml 範例中的自動內容群組︰

<Automatic>
    <ContentGroup Name="Level2">
        <File Name="Assets\Level2\*"/>
    </ContentGroup>
    <ContentGroup Name="Level3">
        <File Name="Assets\Level3\*"/>
    </ContentGroup>
</Automatic>

自動群組的配置與必要群組的配置非常類似,除了有幾個例外︰

  • 有多個內容群組。
  • 除了保留給必要內容群組使用的「Required」之外,每個自動內容群組都可以有唯一的名稱。
  • 自動內容群組不得包括任何必要內容群組中的檔案。
  • 自動內容群組可以包含同時位於其他自動內容群組中的檔案。 每個檔案都只會下載一次,並且會在第一個包含該檔案的自動內容群組中進行下載。

使用萬用字元的秘訣與技巧

內容群組對應中的檔案配置總是會對應到您專案的根資料夾。

在我們的範例中,萬用字元會在這兩 <ContentGroup> 個元素內使用,以擷取一個檔案層級 「Assets\Level2」 或 「Assets\Level3」 中的所有檔案。如果您使用更深入的資料夾結構,您可以使用雙萬用字元:

<ContentGroup Name="Level2">
    <File Name="Assets\Level2\**"/>
</ContentGroup>

您也可以在檔案名稱中使用萬用字元。 例如:若您想要包含您「Assets」資料夾下所有檔案名稱包含「Level2」的檔案,您可以透過這種方式達成:

<ContentGroup Name="Level2">
    <File Name="Assets\*Level2*"/>
</ContentGroup>

將 SourceAppxContentGroupMap.xml 轉換為 AppxContentGroupMap.xml

若要將 SourceAppxContentGroupMap.xml 轉換為最終版本的 AppxContentGroupMap.xml,您可以使用 Visual Studio 2017 或 MakeAppx.exe 命令列工具。

若要使用 Visual Studio 轉換您的內容群組對應:

  1. 新增 SourceAppxContentGroupMap.xml 至您的專案資料夾
  2. 在 \[內容\] 視窗中變更 SourceAppxContentGroupMap.xml 的組建動作為「AppxSourceContentGroupMap」
  3. 在方案總管中的專案上按一下滑鼠右鍵
  4. 流覽至Microsoft Store - > 轉換內容群組對應檔案

若您並未在 Visual Studio 中開發您的應用程式,或您比較喜歡使用命令列,您可以使用 MakeAppx.exe 工具轉換您的 SourceAppxContentGroupMap.xml

一道簡單的 MakeAppx.exe 命令看起來會像這樣︰

MakeAppx convertCGM /s MyApp\SourceAppxContentGroupMap.xml /f MyApp\AppxContentGroupMap.xml /d MyApp\

/s 選項指定 SourceAppxContentGroupMap.xml 的路徑,/f 則指定了 AppxContentGroupMap.xml 的路徑。 最後的選項 /d 則是指定了展開檔案名稱萬用字元的基礎資料夾,而在這個範例中我們使用的即是應用程式專案資料夾。

如需有關 MakeAppx.exe 中可用選項的詳細資訊,請開啟命令提示字元,巡覽至 MakeAppx.exe,然後輸入︰

MakeAppx convertCGM /?

這些就是取得您最終 AppxContentGroupMap.xml 檔案並為您的應用程式準備就緒所需要的所有步驟! 在您的應用程式完全準備好Microsoft Store之前,還有更多功能可以執行。 如需將串流安裝新增至應用程式的詳細資訊,請參閱 此頁面