【问题标题】:type or namespace name 'ShellToast' could not be found in background Task在后台任务中找不到类型或命名空间名称“ShellToast”
【发布时间】:2015-03-03 02:59:28
【问题描述】:

我将 Windows phone 8 应用升级到 8.1 silverlight。但是在使用地理围栏时,我想举杯祝酒。所以我写了这段代码

public sealed class Task : IBackgroundTask
    {
        static string TaskName = "GeofenceTask";
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // Get the information of the geofence(s) that have been hit
            var reports = GeofenceMonitor.Current.ReadReports();
            var report = reports.FirstOrDefault(r => (r.Geofence.Id == "sample") && (r.NewState == GeofenceState.Entered));

            if (report == null) return;

            // Create a toast notification to show a geofence has been hit
            var toastXmlContent = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

            var txtNodes = toastXmlContent.GetElementsByTagName("text");
            txtNodes[0].AppendChild(toastXmlContent.CreateTextNode("Geofence triggered toast!"));
            txtNodes[1].AppendChild(toastXmlContent.CreateTextNode(report.Geofence.Id));

            var toast = new ToastNotification(toastXmlContent);

            var toastNotifier = ToastNotificationManager.CreateToastNotifier();

            toastNotifier.Show(toast);
        }
}

但是在认证过程中它说

此应用程序类型不支持此 API - Api=Windows.UI.Notifications.ToastNotification。模块=。 文件=GeofenceTask.winmd。

之后我做了一些研究,发现 this answer 上面写着

如果你想使用 Windows.UI.Notifications,你必须选择 WNS 否则你有使用 ShellToast

所以我使用 MPN 是因为 Azure 移动服务不支持 WP8.1 silverlight 应用程序的 WNS。

通知中心 Windows Phone SDK 不支持将 WNS 与 Windows Phone 8.1 Silverlight 应用程序。

Source

所以我认为在这种情况下我应该使用 ShellToast。但现在我走到了真正的死胡同。 Windows 运行时组件项目不支持 ShellToast。我没有所需的正确参考。即,Microsoft.Phone.Shell。如果我添加

Using Microsoft.Phone.Shell; 

“电话”带有红色下划线。我该怎么办?

更新:

我尝试从 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.0 添加 Microsoft.phone.dll

但我在定义 ToastShell 时遇到错误,其中显示:

“System.InvalidProgramException”类型的异常发生在 GeofenceTask.winmd 但未在用户代码中处理

附加信息:公共语言运行时检测到无效 程序。

【问题讨论】:

    标签: c# silverlight windows-phone-8.1 background-task


    【解决方案1】:

    所以您需要另一个程序集,其中包含命名空间Microsoft.Phone.Shell 中所需的类?我用谷歌搜索并在 msdn ShellToast Class 上找到了一个程序集:

    程序集:Microsoft.Phone(在 Microsoft.Phone.dll 中)

    版本信息: 视窗电话操作系统 支持:8.1、8.0、7.1

    您必须将此 dll 添加到您的项目引用中。并且它带有 WP OS,因此您可以直接引用它而无需将其与您的应用程序捆绑在一起,因此请设置Copy Local: False

    [编辑] 也许您添加了错误的程序集?您在 cmets 中发布的我回答的路径对我来说似乎是错误的。在以下文件夹中查找它:

    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone\Microsoft.Phone.dll

    【讨论】:

    • 我试过了,但它不起作用。我添加了 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.1\Designer\Microsoft.Phone.dll。没有编译错误,但吐司没有出现。我目前无法使用“调试位置”工具栏调试此后台任务,所以我真的不知道发生了什么,但它肯定不会显示吐司。
    • @Rishabh876:我在答案中添加了路径,尝试在另一个文件夹中查找 dll。
    • 该目录不存在,在“Silverlight”文件夹中,我只有“v5.0”,没有“配置文件”文件夹。我从另一个文件夹中添加了一个。请检查我得到的错误
    • @Rishabh876:我可以看到您收到错误:Common Language Runtime 检测到无效程序。 在您所说的路径中我看不到 Silverlight。我不是专家,但所有人都对我尖叫错误的框架。您必须添加 Silverlight dll,不能使用完整的 .Net dll。您的文件夹路径必须包含 Silverlight。查看您的文件夹 ...\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0 并尝试在其中的一个子目录中找到 dll
    • 我能够获得 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone\Microsoft.Phone.dll 但这个 dll 没有Microsoft.Phone.Shell 中的 shelltoast 类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2011-05-13
    • 2013-03-25
    • 2012-06-19
    • 2017-11-29
    • 2012-09-27
    相关资源
    最近更新 更多