2013-12-23 76 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

相關問題