2013-12-23 46 views
0

我想在我的应用程序使用PeriodicTask,但它调用OnInvoke()方法与此异常之前失败时FileNotFoundException异常运行PeriodicTask

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> 

任何猜测?

回答

1

我认为LockscreenAgent.dll不存在于部署到手机的应用程序目录中。在您的解决方案中,包含前景的项目是否包含对包含背景代理的项目的引用?如果是这样,请检入该参考的“复制本地”设置为“真”的属性。还要检查那个DLL的路径是否正确。

0

在我的情况下,我更改了定期任务项目的名称。结果在Bin/Debug文件夹中,程序集具有旧名称。原因是我忘记了在定期任务项目属性中更改程序集名称和缺省名称空间。当我这样做时,程序集的名称是正确的,并且System.IO.FileNotFoundException已经消失。

See image

相关问题