使用 Windows 應用程式 SDK 的控制台應用程式

你可以建立使用 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());

背景處理

主控台應用程式很適合用於背景處理工作:

  • 資料匯入/匯出工具
  • 檔案監視器與處理器
  • 排程任務執行檔
  • 開發人員工具與自動化指令碼