如何用.NET 6控制台应用实现Windows桌面通知?旧方法已失效
.NET 6 下 Windows 11 控制台应用实现桌面通知的可行方案
方案一:官方WinRT API + Microsoft.Toolkit.Uwp.Notifications(推荐)
.NET 6 对WinRT互操作做了规范,旧的挂钩UWP DLL方式已不再支持,改用官方集成方案即可,步骤如下:
- 配置项目文件
编辑控制台项目的.csproj,指定匹配Windows 11的目标版本(例如10.0.22000.0及以上):
<PropertyGroup> <TargetFramework>net6.0-windows10.0.22000.0</TargetFramework> <UseWindowsForms>false</UseWindowsForms> <UseWPF>false</UseWPF> </PropertyGroup>
- 安装辅助NuGet包
安装微软官方的Microsoft.Toolkit.Uwp.Notifications库,简化Toast通知的构造(无需手动编写XML):
Install-Package Microsoft.Toolkit.Uwp.Notifications
- 编写通知代码
直接在控制台应用中调用API发送通知:
using Windows.UI.Notifications; using Microsoft.Toolkit.Uwp.Notifications; var toastContent = new ToastContent() { Visual = new ToastVisual() { BindingGeneric = new ToastBindingGeneric() { Children = { new AdaptiveText() { Text = "控制台通知测试" }, new AdaptiveText() { Text = "这是来自.NET 6控制台的桌面通知" } } } }, Actions = new ToastActionsCustom() { Buttons = { new ToastButton("打开", "action=open") } } }; var toast = new ToastNotification(toastContent.GetXml()); ToastNotificationManager.CreateToastNotifier("Windows.SystemToast.Default").Show(toast);
方案二:直接调用原生WinRT API(无第三方库)
如果不想依赖第三方库,可以直接构造Toast的XML内容调用原生API:
using Windows.UI.Notifications; // 构造Toast的XML模板内容 var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02); var textElements = toastXml.GetElementsByTagName("text"); textElements[0].AppendChild(toastXml.CreateTextNode("原生API通知")); textElements[1].AppendChild(toastXml.CreateTextNode(".NET 6 控制台直接发送")); var toast = new ToastNotification(toastXml); ToastNotificationManager.CreateToastNotifier().Show(toast);
关键说明
- .NET 6采用了新的WinRT互操作模型,必须通过指定Windows目标框架或引用
Microsoft.Windows.SDK.Contracts包来引入WinRT API,旧的挂钩UWP DLL方式因此失效。 DesktopNotifications.Windows库依赖旧的WinRT兼容层,不适配.NET 6的新模型,不建议继续使用。- Windows 11中,控制台应用可使用默认应用ID(
Windows.SystemToast.Default)发送通知,无需额外注册应用。
内容的提问来源于stack exchange,提问作者Grofit
相关产品推荐
相关产品推荐

