將資源建置到您的應用程式套件,而不是資源套件

某些類型的應用程式 (多語系字典、翻譯工具等) 需要覆寫應用程式套件組合的預設行為,並將資源建置到應用程式套件中,而不是讓這些資源分散在不同的資源套件 (或資源套件) 中。 本主題說明如何執行這個動作。

預設情況下,當您建置 應用程式套件組合 (.appxbundle) 時,僅將語言、縮放比例和 DirectX 功能層級的預設資源內建到應用程式套件中。 您的翻譯資源,以及專為非預設縮放和/或 DirectX 功能層級量身打造的資源,都內建於資源套件中,而且只會下載到需要它們的裝置上。 如果客戶使用設定為西班牙文的語言喜好設定裝置從 Microsoft Store 購買您的應用程式,則只會下載並安裝您的應用程式加上西班牙文資源套件。 如果相同的使用者稍後在 設定中將其語言喜好設定變更為法文,則會下載並安裝應用程式的法文資源套件。 您的資源符合縮放比例和 DirectX 功能層級的類似情況。 對於大多數應用程式來說,這種行為促成了寶貴的效率,而這也是您和客戶希望發生的事情。

但是,如果您的應用程式允許使用者從應用程式內部 (而不是透過設定) 動態變更語言,則該預設行為是不合適的。 您實際上希望所有語言資源都能無條件地與應用程式同時一起下載並安裝,然後保留在裝置上。 您希望將所有這些資源建置到您的應用程式套件中,而不是建置到單獨的資源套件中。

注意:將資源套件含在應用程式套件中實際上會增加應用程式的大小。 這就是為什麼只有在應用程式的性質要求它時,才值得這麼做。 如果並非如此,那麼除了照常建置一般應用程式套件組合之外,您不需要執行任何操作。

您可以設定 Visual Studio 以透過以下兩種方式之一將資源建置到您的應用程式套件中。 您可以將設定檔新增至專案,或者也可以直接編輯專案檔。 使用您最熟悉的選項或最適合您的建置系統的選項。

選項 1。 使用 priconfig.packaging.xml 在應用程式套件中建置資源

  1. 在 Visual Studio 中,將新項目新增至您的專案。 選擇 XML 檔案,並將檔案命名為 priconfig.packaging.xml
  2. 在方案總管中,選取 priconfig.packaging.xml 並檢查屬性視窗。 檔案的 [建置動作] 應該設定為 [無],而 [複製到輸出目錄] 應該設定為 [不要複製]。
  3. 使用此 XML 取代該檔案的內容。
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. 每個 <autoResourcePackage> 元素都會告訴 Visual Studio 自動將指定限定詞名稱的資源分割到單獨的資源套件中。 這稱為自動分割。 對於到目前為止的檔案內容,您實際上尚未變更 Visual Studio 的行為。 換句話說,Visual Studio 的行為就如同此檔案存在這些內容一樣,因為這些是預設值。 如果您不希望 Visual Studio 根據限定詞名稱自動分割,請從檔案中刪除該 <autoResourcePackage> 元素。 如果您希望將所有語言資源內建到應用程式套件中,而不是自動分割為單獨的資源套件,則檔案的外觀如下。
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. 儲存並關閉檔案並重建您的專案。

若要確認您的自動分割選擇已被考慮在內,請尋找該檔案 <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml 並確認其內容與您的選擇相符。 如果是,則表示您已成功設定 Visual Studio,將您選擇的資源建置到應用程式套件中。

您需要執行最後一個步驟。 但前提是您刪除了 Language限定詞名稱。 您需要將應用程式支援的所有語言的聯集指定為應用程式的預設語言。 有關詳細資訊,請參閱指定應用程式使用的預設資源。 如果您在應用程式套件中包含英文、西班牙文和法文資源,則這就是您priconfig.default.xml將包含的內容。

   <default>
      <qualifier name="Language" value="en;es;fr" />
      ...
   </default>

這是如何運作的?

在幕後,Visual Studio 會啟動一個名為 MakePri.exe 的工具來產生一個稱為套件資源索引的檔案,該檔案描述了應用程式的所有資源,包括指示要自動分割的資源限定詞名稱。 有關此工具的詳細資訊,請參閱使用 MakePri.exe 手動編譯資源。 Visual Studio 會將設定檔傳遞至 MakePri.exepriconfig.packaging.xml檔案的內容用做該設定檔的 <packaging> 元素,這是確定自動分割的部分。 因此,新增和編輯 priconfig.packaging.xml 最終會影響 Visual Studio 為您的應用程式產生的套件資源索引檔案的內容,以及應用程式套件組合中套件的內容。

使用與以下不同的檔案名稱priconfig.packaging.xml

如果您將檔案命名為 priconfig.packaging.xml,則 Visual Studio 將識別它並自動使用它。 如果您提供不同的名稱,則必須讓 Visual Studio 知道。 在專案檔案中,在第一個 <PropertyGroup> 元素的開始標記和結束標記之間新增此 XML。

<AppxPriConfigXmlPackagingSnippetPath>FILE-PATH-AND-NAME</AppxPriConfigXmlPackagingSnippetPath>

FILE-PATH-AND-NAME 替換為檔案的路徑和名稱。

選項 2。 使用專案檔將資源建置至應用程式套件

這是選項 1 的替代方案。 一旦您了解選項 1 的運作方式,您可以選擇改為執行選項 2,這更適合您的開發和/或建置工作流程。

在專案檔案中,在第一個 <PropertyGroup> 元素的開始標記和結束標記之間新增此 XML。

<AppxBundleAutoResourcePackageQualifiers>Language|Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

以下是刪除第一個限定詞名稱之後的外觀。

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

儲存和關閉,並重建您的專案。

您需要執行最後一個步驟。 但前提是您刪除了 Language限定詞名稱。 您需要將應用程式支援的所有語言的聯集指定為應用程式的預設語言。 有關詳細資訊,請參閱指定應用程式使用的預設資源。 如果您在應用程式套件中包含英文、西班牙文和法文資源,這就是您的專案檔將包含的內容。

<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>