根據預設,Windows 應用程式 SDK 專案與架構相依。 若要切換至獨立式部署,請遵循下列步驟(Windows 應用程式 SDK 部署概觀中說明與架構相依和獨立式的詞彙)。
- 在 Visual Studio 中,以滑鼠右鍵按兩下應用程式項目節點,然後按兩下 [ 編輯項目檔 ] 以開啟要編輯的應用程式項目檔。 針對C++專案,請先按兩下 [卸除專案]。
- 在應用程式項目檔的main
PropertyGroup內,新增<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>,如下列螢幕快照所示。
- 儲存並關閉項目檔。
- 點選 「重載專案」 。
- 如果你使用的是 Windows 應用程式封裝專案(而不是使用 WinUI 空白應用程式(封裝版)的單一專案 MSIX),那麼在封裝專案的專案檔中也要做上述所有修改。
備註
不應更改圖書館專案。 獨立式部署應僅在應用程式專案中進行設定(而且,僅在 Windows 應用程式封裝專案中適用時)。
如需範例應用程式,請參閱 Windows 應用程式 SDK 獨立部署範例。
在項目檔中將 WindowsAppSDKSelfContained 屬性設定為 true ,Windows 應用程式 SDK Framework 套件的內容將會擷取至組建輸出,並部署為應用程式的一部分。
備註
.NET 應用程式必須 發佈為獨立式,才能完全獨立。 請參閱 此範例,瞭解如何使用發佈設定檔來配置 .NET 自包含方式。
請注意,dotnet publish 會封裝受管理組件,但 無法為 WinUI 3 應用程式產生單一檔案 EXE——原生 Windows 應用程式 SDK 執行階段相依項必須保留為個別檔案。 詳情請參見 單列 EXE 。
備註
C++應用程式必須使用 混合式 CRT,才能完全獨立。 從 HybridCRT.props 匯入 Directory.Build.props 是配置解決方案中所有專案的建議方式(請參閱 Directory.Build.props中的範例)。 封裝的應用程式也必須在其項目檔中設定 <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> 。 如需如何使用混合式CRT,請參閱 獨立式部署 範例應用程式。
如果你的應用程式已經打包(更多資訊請參見套件與部署概述),那麼 Windows 應用程式 SDK 的相依關係會作為內容包含在 MSIX 套件中。 部署應用程式仍然需要像任何其他已封裝的應用程式一樣註冊 MSIX 套件。
如果您的應用程式打包到外部位置或未封裝,那麼 Windows 應用程式 SDK 的相依項會被複製到組建輸出中的 .exe 旁邊。 您可以 xcopy 部署產生的檔案,或將它們包含在自定義安裝程式中。
其他 MSIX 套件的相依性
Windows 應用程式 SDK 中的少數 API 依賴代表重要作系統 (OS) 功能的其他 MSIX 套件。
- 例如,推播通知 API(PushNotificationManager)相依於 Singleton 套件(應用程式通知 API,例如 AppNotificationManager,則不需要此套件)。 請參見 Windows 應用程式 SDK 的部署架構。
若要在自包含應用程式中使用依賴其他 MSIX 套件的 API,您有以下選項:
- 您可以讓功能成為選擇性專案,僅在可行且必要時啟用。 呼叫 API 的 IsSupported 方法(PushNotificationManager.IsSupported)可讓您在執行階段動態檢查這些 API 是否可供呼叫應用程式在其執行所在的系統上使用。
- 這可讓您安全、有條件、選擇性地使用 API,而不會影響獨立式部署的簡單性。
- 只有當 OS 服務安裝在應用程式部署外部時,您的應用程式才會亮起適當的功能。 但事實上,在某些情況下,即使沒有 Singleton 套件存在,API 仍可運作:所以呼叫 IsSupported 來檢查通常是個好主意。
- 將所需的 MSIX 套件部署為應用程式安裝的一部分。
- 這使您能在所有情境中依賴 API。 但要求 MSIX 套件部署相依性作為應用程式部署的一部分,可能會危害獨立式部署的簡單性。
- 請勿使用 API。
- 請考慮提供類似功能的替代 API,而不需要額外的部署需求。
選擇不參加(或加入)自動化 UndockedRegFreeWinRT 支援
專案屬性 WindowsAppSdkUndockedRegFreeWinRTInitialize 控制 Windows 應用程式 SDK 的無掛接、免註冊 Windows 執行階段(UndockedRegFreeWinRT)實作是否會在應用程式啟動時自動啟用。 解除封裝的獨立應用程式需要該支援。
WindowsAppSdkUndockedRegFreeWinRTInitialize 預設為 true,前提是 WindowsAppSDKSelfContained 為 true、WindowsPackageType 為 None,且 OutputType 專案屬性設為 Exe 或 WinExe(亦即專案會產生可執行檔)。 最後一項條件預設會防止自動在類別函式庫 DLL 及其他非執行檔中加入 UndockedRegFreeWinRT 支援。 如果您 非可執行檔中需要自動 UndockedRegFreeWinRT 支援(例如,未初始化 UndockedRegFreeWinRT 的主機進程可執行檔所載入的測試 DLL),則可以使用 <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>在專案中明確啟用它。
相關主題
- Windows 應用程式 SDK 部署概觀
- Windows 應用程式 SDK 獨立部署範例
- 封裝與部署概述
- 適用於 Windows 應用程式 SDK 的
部署架構