本文介紹 與 MSIX 架構套件相關的重要概念。 本文中的資訊提供實用的內容,可協助您進一步瞭解 Windows App SDK 和 Windows 11 OS 中 動態相依性 功能的設計和用途。 這項功能可讓您的應用程式在運行時間參考及使用 MSIX 架構套件。
架構套件和套件圖形
MSIX 是一種套件格式,可提供現代化封裝和部署體驗。 它還提供了一種簡潔且受信任的方式,透過 MSIX 架構套件封裝可轉散發的函式庫、內容和元件。 MSIX 架構套件可讓已封裝的應用程式透過使用者裝置上的單一共用來源存取元件,而不是將它們系結到應用程式套件中。 常見的架構套件包括 Windows App SDK (包括 WinUI3)、WinUI2、 VCLibs 和 DirectX 運行時間。
從 Windows 8 開始,並繼續執行 Windows 10 和 Windows 11,每個進程都有一個 套件圖形 ,提供應用程式可用的所有套件清單,包括架構、資源、選擇性和主要套件。 此圖表可讓應用程式載入參考套件所提供的 DLL、內容和運行時間類別宣告。 在過去,此圖表在建立程式時已修正,而且在運行時間無法改變它:
- 針對已封裝的應用程式,圖形是根據應用程式套件指令清單中 PackageDependency 元素中宣告的套件相依性初始化。 建置已封裝的應用程式時,通常會在建置程式期間根據項目參考和相依性為您完成此作業。
- 針對未封裝的應用程式,套件圖形是空的,而且無法變更。 因此,未封裝的應用程式僅限於 標準 DLL 搜尋順序 ,且無法存取架構套件。
隨著在 Windows App SDK 和 Windows 11 中引入動態相依性支持,此靜態套件圖形的限制已解除。 開發人員可以使用動態相依性,在執行期間從其應用程式中參考和使用 MSIX 框架套件。 動態相依性會從應用程式移除靜態套件圖形限制,而開發人員可以決定其運用架構套件的方式。
動態相依性的主要案例
雖然動態相依性可讓任何應用程式在運行時間新增套件架構相依性,但此功能主要是供封裝於外部位置或未封裝應用程式的應用程式使用。 已封裝的應用程式仍可透過其套件指令清單中的 PackageDependency 元素繼續新增靜態相依性。
- 大多數開發人員僅會使用動態相依性來引用 Windows App SDK 架構套件,無論是在外部封裝位置還是未封裝的應用程式中,以便讓應用程式可以呼叫由 Windows App SDK 運行時所提供的 API。 若需此情境的詳細資訊,請參閱 針對封裝於外部位置或未封裝的應用程式使用 Windows App SDK 執行階段。
- 在某些情況下,開發人員可能會希望使用動態相依項,從未封裝的應用程式中參照不同的架構套件(非 Windows App SDK 架構套件的其他套件),例如 WinUI2 的框架套件或 DirectX 執行階段。 如需此案例的詳細資訊,請參閱 在運行時間使用動態相依性 API 參考 MSIX 套件。
架構套件的維護模型
動態相依性功能會保留所參考及在運行時間動態使用之架構套件的服務管線完整性。
MSIX 架構套件支援以並存模型進行的維護,這表示每個版本都安裝在各自獨立的版本資料夾中。 這可讓使用中的應用程式即使在較新的應用程式安裝較新版本的架構套件時也能保持運作。 OS 根據套件的 安裝時間參考 和 運行時間參考 是否存在,具有卸載邏輯,決定何時刪除指定架構套件的舊版本。
- 安裝應用程式時,它可以建立架構套件的 安裝時間參考 。 此參考會通知 OS 應用程式相依於指定的架構套件,如此一來,操作系統就不會在安裝應用程式時卸載架構套件。
- 當應用程式需要使用架構套件中的 API 或內容時,它可以新增架構套件的 運行時間參考 。 此參考會通知作業系統架構套件正在使用中,並以並排方式處理任何版本更新。 如果已安裝新版本的架構套件,但執行中的應用程式使用中版本較舊,則除非移除舊版的所有運行時間參考,否則 OS 無法移除較舊的版本。
例如,假設此案例:
- 應用程式 A 正在執行並使用指定架構套件 1.0.0.0 版。
- 應用程式 B 已安裝,且相依於相同架構套件 1.0.0.1 版。
在此案例中,應用程式 A 和 應用程式 B 將會安裝及使用這兩個版本的架構套件。不過,當使用者關閉 App A ,然後重新啟動時,它會挑選架構套件的較新版本 1.0.0.1。 此時,運行時間參考需求對架構套件 1.0.0.0 版不再有效,而且 OS 可以安全地移除 1.0.0.0 版。 稍後,當使用者卸載 應用程式 A 和 應用程式 B 時,安裝時間參考需求就不再有效,而且 OS 可以完全移除架構套件。
對於使用 PackageDependency 元素指定架構套件靜態參考的已封裝應用程式,當安裝或卸載應用程式時,OS 會追蹤架構套件的安裝時間參考。 針對使用動態相依性功能所管理的運行時間參考,OS 知道封裝的應用程式何時正在執行,而且會在有較新的應用程式可用時避免移除其使用中的架構套件。