請參閱適用於獨立應用程式的 Windows 應用程式 SDK 部署指南
根據預設,Windows 應用程式 SDK 專案為架構相依。 若要切換至獨立部署,請遵循下列步驟 (架構相依和獨立等詞彙的描述包含於 Windows 應用程式 SDK 部署概觀中)。
- 在 Visual Studio 中,以滑鼠右鍵按一下應用程式專案節點,然後按一下 [編輯專案檔] 以開啟應用程式專案檔案進行編輯。 針對 C++ 專案,請先按一下 [卸載專案]。
- 在應用程式專案檔案中,在主要
PropertyGroup
內,新增<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
如下圖所示。
- 針對封裝專案,在應用程式專案檔的結尾處,於
</Project>
關閉標籤前,新增Target
,如下所示。
<Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
<ItemGroup>
<FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
</ItemGroup>
</Target>
注意
這是針對 Windows 應用程式 SDK 1.1 中錯誤的因應措施,Windows 應用程式 SDK 1.2 不需要。 只有封裝專案才需要。
- 儲存並關閉專案檔。
- 按一下重新載入專案。
- 如果您使用 Windows 應用程式封裝專案 (而不是透過已封裝的空白應用程式 (WinUI 3 in Desktop) 的單一專案 MSIX),則也會在封裝專案的專案檔中進行上述所有變更。
注意
不應該變更程式庫專案。 獨立部署應該只在應用程式專案中設定 (以及,如果適用,在 Windows 應用程式封裝專案中設定)。
如需範例應用程式,請參閱 Windows 應用程式 SDK 獨立部署範例。
將專案檔案中的 WindowsAppSDKSelfContained
屬性設定為 true
後,Windows 應用程式 SDK 架構套件的內容將會被擷取到您的建置輸出中,作為應用程式的一部分部署。
注意
.NET 應用程式也必須發佈為獨立應用程式,才能完全獨立部署。 請參閱此範例,以瞭解如何使用發行設定檔,設定 .NET 獨立應用程式。 Windows 應用程式 SDK 1.1 尚不支援 dotnet publish
。
注意
C++ 應用程式也必須使用混合式 CRT,才能完全獨立部署。 建議的設定方式是從 Directory.Build.props 中匯入 HybridCRT.props,這是在方案中所有專案中進行設定的推薦方式 (請參閱 Directory.Build.props 中的範例)。 封裝應用程式也必須在其專案檔中設定 <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning>
。 如需如何使用混合式 CRT 範例應用程式,請參閱獨立部署。
如果您的應用程式已封裝 (如需詳細資訊,請參閱部署概觀),則 MSIX 套件中會包含 Windows 應用程式 SDK 相依性的內容。 部署該應用程式仍然需要像任何其他封裝應用程式一樣註冊 MSIX 套件。
如果您的應用程式在外部位置進行封裝或未封裝,則會在組建輸出的 .exe
旁邊複製 Windows 應用程式 SDK 相依性。 您可以使用 xcopy 部署產生的檔案,或將它們包含在自訂安裝程式中。
其他 MSIX 套件的相依性
Windows 應用程式 SDK 中有一小部分 API 依賴額外的 MSIX 套件,這些套件代表了關鍵的作業系統 (OS) 功能。
- 例如 (截至 Windows App SDK 1.1 版本),推播通知 API (PushNotificationManager) 和應用程式通知 API (AppNotificationManager) 依賴於 Singleton 套件 (請參閱 Windows 應用程式 SDK 的部署架構)。
這表示如果您想要在獨立應用程式中使用這些 API,則有下列選項:
- 將功能設定為選擇性,並盡可能在必要情況下才啟用。 透過呼叫 API 的 IsSupported 方法 (PushNotificationManager.IsSupported 和 AppNotificationManager.IsSupported),您可以在執行階段動態檢查 API 是否可供執行系統上的呼叫應用程式使用。
- 這樣可以安全、有條件、選擇性地使用 API,而不會影響獨立部署的簡單性。
- 只有當 OS 服務安裝在應用程式部署外部時,您的應用程式才會啟用適當的功能。 但事實上,在某些情況下,即使沒有 Singleton 套件,API 也能運作; 因此呼叫 IsSupported 進行檢查通常是一個好主意。
- 將必要的 MSIX 套件部署為應用程式安裝的一部分。
- 這可讓您在所有案例中相依於 API。 但要求 MSIX 套件部署相依性作為應用程式部署的一部分,可能會讓獨立部署失去簡單性。
- 請勿使用 API。
- 請在不需要額外的部署需求下,考慮提供類似功能的替代 API。
請參閱退出 (或加入) 自動 UndockedRegFreeWinRT 支援。
Windows 應用程式 SDK 1.2 版 (穩定通道) 中引進了專案屬性 WindowsAppSdkUndockedRegFreeWinRTInitialize。 如果此屬性設為 true,則可確保在應用程式啟動時自動啟用無須登錄註冊的 Windows 執行階段 (Undocked RegFree WinRT) 的 Windows 應用程式 SDK 實作。 未封裝的獨立應用程式需要這種支援。
如果 WindowsAppSDKSelfContained 為 true 且 WindowsPackageType 為 None 並且 (從 Windows App SDK 1.2 版開始) OutputType 專案屬性設定為 Exe 或 WinExe (即專案產生執行檔),則 WindowsAppSdkUndockedRegFreeWinRTInitialize 預設為 true。 最後一個條件是防止將自動 UndockedRegFreeWinRT 支援新增至類別庫 DLL 和其他非可執行檔。 如果您確實需要非可執行檔中的自動 UndockedRegFreeWinRT 支援 (例如,由不初始化 UndockedRegFreeWinRT 的主機程序可執行檔載入的測試 DLL),那麼您可以使用 <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>
,在專案中明確啟用它。