使用 MRT Core 管理資源
MRT Core 是新式 Windows 資源管理系統的簡化版本,會隨 Windows 應用程式 SDK 一起發布。
MRT Core 有組建階段和執行階段兩種功能。 在組建階段,系統會針對封裝在應用程式中的資源,建立所有不同變數的索引。 此索引是封裝資源索引,亦即 PRI,它會一起納入應用程式的套件中。
必要條件
若要在 Windows 應用程式 SDK 使用 MRT Core API:
- 請下載並安裝最新版的 Windows 應用程式 SDK。 如需詳細資訊,請參閱 開始使用 WinUI。
- 請遵循指示來建立您的第一個 WinUI 3 專案,或使用現有專案中的 Windows 應用程式 SDK。
如需詳細了解 Windows 應用程式 SDK 的 MRT Core 供應情況,請查看發布通道。
封裝資源索引 (PRI) 檔案
每個應用程式套件在應用程式中都應包含資源的二進位索引。 該索引是在組建階段建立,且會包含在一或多個 PRI 檔案中。 每個 PRI 檔案都包含已命名的資源集合,可當作資源地圖來參照。
PRI 檔案包含實際字串資源。 內嵌的二進位與檔案路徑資源會直接從專案檔案中編目到索引。 套件通常包含個別語言的單一 PRI 檔案,名稱為 resources.pri。 位在每個套件根目錄的 resources.pri 檔案會在 ResourceManager 物件具現化時載入。
PRI 檔案僅含資料,因此不採用可攜式執行檔 (PE) 格式。 這種檔案的設計僅適用於資料。
注意
如果是 .NET 應用程式,在 Windows 應用程式 SDK 版本 0.8 及之後的版本中,Visual Studio 資源檔案的 Build Action 檔案屬性會自動設定,省去手動專案設定的必要。 版本 1.0 造成了問題 1674。 此問題在 1.1 版已修正 (從穩定通道),但修正需要使用 .NET SDK 6.0.300 或之後的版本。 如果您使用較舊版本的 .NET SDK,請繼續使用 1.0 版的記事中提供的解決方法。
以 MRT Core 存取應用程式資源
MRT Core 提供多種方法供您存取應用程式資源。
注意
在 Windows 應用程式 SDK 1.0 Preview 1 和更新版本中,MRT Core API 位於 Microsoft.Windows.ApplicationModel.Resources 命名空間中。 在以前的版本中,則位於 Microsoft.ApplicationModel.Resources 命名空間。
ResourceLoader 的基本功能
以程式設計方式存取應用程式資源的最簡單方法是使用 ResourceLoader 類別。 ResourceLoader 提供基本的存取權,可讓您從資源檔案集、參照程式庫或其他套件存取字串資源。
ResourceManager 的進階功能
ResourceManager 類別提供資源的額外資訊,例如列舉和檢查。 這些功能是 ResourceLoader 類別所不能提供的。
ResourceCandidate 物件代表單一的具體資源值及其限定詞,例如英文的「Hello World」字串,或者以「logo.scale-100.jpg」代表比例為 100 的解析度時的限定影像資源。
應用程式的資源存放在階層化的集合中,可透過 ResourceMap 物件存取。 ResourceManager 針對應用程式使用的各種高階層 ResourceMap 執行個體提供存取權,它們可對應應用程式的各種套件。 ResourceManager.MainResourceMap 值可對應目前應用程式套件的資源地圖,且排除任何參照架構套件。 每個 ResourceMap 都是按照套件資訊清單中指定的套件名稱來命名。 ResourceMap 當中是樹狀子目錄 (請參閱 ResourceMap.GetSubtree)。 樹狀子目錄通常對應含有資源的資源檔案。
ResourceManager 不僅支援存取應用程式的字串資源,也會維護列舉與檢查各種檔案資源的功能。 為了避免檔案和從檔案中衍生的其他資源發生衝突,已加入索引的檔案路經全都會位於預留的「檔案」ResourceMap 樹狀子目錄中。 舉例來說,檔案「\Images\logo.png」對應的資源名稱是「Files/images/logo.png」。
以 ResourceContext 限定資源的選擇
系統在選擇資源時的依據是特定 ResourceContext,它是資源限定詞的值集合 (語言、比例、對比等)。 除非遭到覆寫,否則預設脈絡會使用應用程式目前針對個別限定詞值的設定。 舉例來說,影像這類資源可能受到比例的限定,而比例會因監視器而異,因此也會因應用程式檢視而異。 基於此,每個應用程式檢視都有不同的預設脈絡。 一旦您擷取了資源選項,就必須以 ResourceContext 執行個體來傳遞,以便取得最適合特定檢視的值。
範例
如需範例為您示範如何使用 MRT Core API,請參閱 MRT Core 範例。