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