我正在尝试在我的应用中使用PeriodicTask
,但在使用此异常调用OnInvoke()
方法之前失败
System.IO.FileNotFoundException
无法加载文件或程序集“LockscreenAgent,Culture = neutral,PublicKeyToken = null”或其依赖项之一。系统找不到指定的文件。
这是我的代码(我省略了ScheduledAgent
的代码,因为它甚至在创建之前就失败了!):
(App.xaml.cs)
pblic App(){
(... default code ...)
InitializeAgent();
}
private const string PeriodicTaskName = "LockscreenAgent";
private PeriodicTask _periodicTask;
private async void InitializeAgent()
{
//Checks if we need to ask user's permission to set the lockscreen
if (!LockScreenManager.IsProvidedByCurrentApplication)
{
// If you're not the provider, this call will prompt the user for permission.
// Calling RequestAccessAsync from a background agent is not allowed.
await LockScreenManager.RequestAccessAsync();
}
// User gave us permission, let's start the background agent!
if (!LockScreenManager.IsProvidedByCurrentApplication) return;
// Start the agent
StartPeriodicAgent();
}
private void StartPeriodicAgent()
{
// is old task running, remove it
_periodicTask = ScheduledActionService.Find(PeriodicTaskName) as PeriodicTask;
if (_periodicTask != null)
{
try
{
ScheduledActionService.Remove(PeriodicTaskName);
}
catch (Exception)
{
}
}
// create a new task
_periodicTask = new PeriodicTask(PeriodicTaskName)
{
Description = "This is LockscreenPreview image provider app.",
ExpirationTime = DateTime.Now.AddDays(14)
};
try
{
// add this to scheduled action service
ScheduledActionService.Add(_periodicTask);
// debug, so run in every 30 secs
#if DEBUG
ScheduledActionService.LaunchForTest(PeriodicTaskName, TimeSpan.FromSeconds(30));
Debug.WriteLine("Periodic task is started: " + PeriodicTaskName);
#endif
}
catch (InvalidOperationException exception)
{
if (exception.Message.Contains("BNS Error: The action is disabled"))
{
// load error text from localized strings
MessageBox.Show("Background agents for this application have been disabled by the user.");
}
if (
exception.Message.Contains(
"BNS Error: The maximum number of ScheduledActions of this type have already been added."))
{
// No user action required. The system prompts the user when the hard limit of periodic tasks has been reached.
}
}
catch (SchedulerServiceException)
{
// No user action required.
}
}
(WMAppManifest.xaml)
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="LSAgent" Source="LockscreenAgent" Type="LockscreenAgent.ScheduledAgent" />
</ExtendedTask>
</Tasks>
<Tokens>
...
</Tokens>
<Extensions>
<Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
</Extensions>
有什么猜测吗?
答案 0 :(得分:1)
我认为部署到手机的app目录中没有LockscreenAgent.dll。在您的解决方案中,包含前台的项目是否包含对包含后台代理的项目的引用?如果是这样,请检查该引用的属性是否将Copy Local设置为true。还要检查DLL的路径是否正确。
答案 1 :(得分:0)
就我而言,我更改了定期任务项目的名称。因此,在Bin / Debug文件夹中,程序集具有旧名称。原因是我忘记了在定期任务项目属性中更改程序集名称和默认名称空间。当我这样做时,程序集的名称是正确的,并且System.IO.FileNotFoundException已经消失。