具有Windows 应用 SDK的控制台应用

可以创建使用Windows 应用 SDK功能(例如应用生命周期管理、丰富激活、推送通知等)的控制台应用。 与 UWP 控制台应用(需要特殊模板和 C++/WinRT)不同,桌面控制台应用使用标准.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 打包。

注释

推送通知、后台任务和应用服务等功能需要包标识。 基本生命周期和激活 API 无需打包即可工作。

与 UWP 控制台应用的差异

功能 UWP 控制台应用 桌面控制台应用
语言支持 仅限 C++/WinRT 和 C++/CX C#、C++ 和任何.NET语言
项目模板 特殊 UWP 控制台模板 (VS 2017/2019) 标准.NET控制台或 Win32
清单要求 desktop4:Subsystem="console" 不是必需
激活 AppExecutionAlias 在清单文件中 标准命令行或高级激活
SDK 集成 仅限 WinRT API 对 Windows 应用 SDK 的完整访问权限

Important

UWP 控制台应用需要不再主动维护的特殊Visual Studio模板。 对于新的控制台应用,请使用具有 Windows 应用 SDK NuGet 包的标准.NET控制台项目。

常见场景

具有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());

后台处理

控制台应用适用于后台处理任务:

  • 数据导入/导出实用工具
  • 文件监视器和处理器
  • 计划的任务可执行文件
  • 开发者工具和自动化脚本