你可以建立使用 Windows 應用程式 SDK 功能(如應用程式生命週期管理、豐富啟用、推播通知等)的主控台應用程式。 與需要特殊範本與 C++/WinRT 的 UWP 主控台應用程式不同,桌面主控台應用程式使用標準的 .NET 或 C++ 專案類型。
用 Windows 應用程式 SDK 建立主控台應用程式
步驟 1:建立 .NET 控制台專案
使用標準的 .NET 控制台應用程式範本:
dotnet new console -n MyConsoleApp
cd MyConsoleApp
步驟 2:新增 Windows 應用程式 SDK NuGet 套件
dotnet add package Microsoft.WindowsAppSDK
步驟 3:使用 Windows 應用程式 SDK API
using Microsoft.Windows.AppLifecycle;
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Console app with Windows App SDK");
// Check activation kind
var activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
Console.WriteLine($"Activation kind: {activatedArgs.Kind}");
// Use single-instance pattern
var instance = AppInstance.FindOrRegisterForKey("my-console-app");
if (!instance.IsCurrent)
{
Console.WriteLine("Another instance is running. Redirecting...");
await instance.RedirectActivationToAsync(activatedArgs);
return;
}
// Your app logic here
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
}
主控台應用程式的套件識別碼
部分 Windows 應用程式 SDK 功能需要 MSIX 套件識別碼。 您可以透過兩種方式為您的主控台應用程式指定套件識別:
- 以 MSIX 格式打包 — 建立一個 Windows 應用程式打包 Project,並將你的主控台應用程式作為參考。
- 使用外部識別碼 — 註冊一個不包含完整 MSIX 封裝的稀疏封包作為識別碼。
Note
像是推播通知、背景任務和應用程式服務等功能都需要套件身份。 基本的生命週期與啟用 API 無需封裝即可運作。
與 UWP 控制台應用程式的差異
| Feature | UWP 控制台應用程式 | 桌面控制台應用程式 |
|---|---|---|
| 語言支援 | 僅支援 C++/WinRT 與 C++/CX | C#、C++ 以及任何 .NET 語言 |
| 項目範本 | 特別 UWP 控制台範本(VS 2017/2019) | 標準 .NET 主機或 Win32 |
| 清單要求 | desktop4:Subsystem="console" |
非必要 |
| Activation |
AppExecutionAlias 在 manifest 中 |
標準命令列或進階啟用 |
| SDK 整合 | 僅限於 WinRT API | 完整 Windows 應用程式 SDK 存取權限 |
Important
UWP 主控台應用程式需要特殊的 Visual Studio 範本,但這些範本已不再積極維護。 對於新的主控台應用程式,請使用標準的 .NET 主控台專案,搭配 Windows 應用程式 SDK NuGet 套件。
常見場景
具備 Windows 整合的命令列工具
建立能與 Windows 功能整合的 CLI 工具:
using Microsoft.Windows.AppNotifications;
// Send a notification from a console app (requires package identity)
var builder = new AppNotificationBuilder()
.AddText("Build complete")
.AddText("Your project built successfully.");
AppNotificationManager.Default.Show(builder.BuildNotification());
背景處理
主控台應用程式很適合用於背景處理工作:
- 資料匯入/匯出工具
- 檔案監視器與處理器
- 排程任務執行檔
- 開發人員工具與自動化指令碼