Windows phone WP7后台代理是否必须位于单独的DLL中?

Windows phone WP7后台代理是否必须位于单独的DLL中?,windows-phone,background-agents,Windows Phone,Background Agents,阅读Windows Phone中的后台代理。所有的指南都说我应该先为代理创建一个新的项目。这是要求吗?引用地点 更大的问题是-框架如何找到实现计划任务的类?好的,启动后台任务需要调用ScheduledActionService.Add()将ScheduledAction-派生对象作为参数传递。在这里我看不到任何指向任务实现标识的指针。也没有在清单中注册任务 也没有在清单中注册任务 是的。请参阅清单文件中的“BackgroundServiceAgent”元素: 最后,我不知道是否需要创建一个单独的

阅读Windows Phone中的后台代理。所有的指南都说我应该先为代理创建一个新的项目。这是要求吗?引用地点

更大的问题是-框架如何找到实现计划任务的类?好的,启动后台任务需要调用
ScheduledActionService.Add()
ScheduledAction
-派生对象作为参数传递。在这里我看不到任何指向任务实现标识的指针。也没有在清单中注册任务

也没有在清单中注册任务

是的。请参阅清单文件中的“BackgroundServiceAgent”元素:


最后,我不知道是否需要创建一个单独的项目。通过在清单中手动添加该行并指向主项目中的一个类,我看不出在技术上有什么可以阻止后台代理工作。不过我还没试过。不过,将后台代理放在一个单独的程序集中还是很方便的:代理的内存限制低得离谱,因此不必加载主项目及其依赖项可能会节省数百KB的内存。是的,后台任务需要位于单独的项目中理论上后台任务可能在原始项目中,但随后它将很容易达到内存上限,因为需要加载整个项目才能只运行后台任务代码

还需要使用“添加引用”将其添加到主应用程序项目中。
具有后台任务的项目也需要有类,即ScheduledTaskAgent的子类

然后(对于WP8应用程序),当您的应用程序使用Visual Studio构建时,如果Visual Studio发现带有ScheduledTaskAgent的引用项目,则会将新条目注入WMAppManifest.xml中,以告知应用程序启动器此应用程序具有可用的后台任务,并且万一用户实际注册此任务以运行,WP OS应启动位于应用程序清单中的程序集。这是它在清单文件中的外观:

<Tasks>
  <DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume" />
  <ExtendedTask Name="BackgroundTask">
    <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="EreaderBackgroundAgent" Source="EreaderBackgroundAgent" Type="EreaderBackgroundAgent.ScheduledAgent" />
  </ExtendedTask>
</Tasks>

DefaultTask条目仅描述默认应用程序入口点,ExtendedTask是后台任务的条目

还请注意,在为Windows Phone 7.5开发应用程序时,必须手动将此条目添加到清单中,开发人员发布的应用程序清单中没有此条目是一个常见问题


另一个有趣的发现是,如果您在主项目->libraryA中引用了另一个libraryB,并且只有libraryB实现了ScheduledTaskAgent,那么Visual Studio不会将该条目添加到清单中,因为它不能检查间接引用的项目-如果libraryA没有ScheduledTaskAgent实现,则该库不会被视为后台任务库。但是,您可以再次手动将libraryA条目添加到清单中,它将正常工作。

清单中也没有注册任务。
它们是。请参阅清单文件中的“BackgroundServiceAgent”元素:对。这回答了两个问题。我想知道为什么它没有在多任务下记录下来。它也不在清单编辑GUI中。最后,我不知道是否需要创建一个单独的项目。通过在清单中手动添加该行并指向主项目中的一个类,我看不出在技术上有什么可以阻止后台代理工作。不过我还没试过。尽管如此,将后台代理放在单独的程序集中还是很方便的:代理的内存限制低得离谱,因此不必加载主项目及其依赖项可能会节省数百KB的内存点。回答,我接受。清单的自动修改并没有发生在我身上——无论是在真正的解决方案上还是在测试方案上。但没关系,手动步骤非常简单。注入的标记不会添加到解决方案中的文件中,而是添加到创建的XAP包中的清单文件中,只需将其签出即可。