0

我正在尝试PeriodicTask在我的应用程序中使用 a ,但在调用OnInvoke()带有此异常的方法之前它失败了

System.IO.FileNotFoundException

无法加载文件或程序集“LockscreenAgent,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。

这是我的代码(我省略了ScheduledAgent's 的代码,因为它甚至在创建它之前就失败了!):

(应用程序.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>

有什么猜测吗?

4

2 回答 2

1

我认为 LockscreenAgent.dll 在部署到手机的应用程序目录中不存在。在您的解决方案中,包含前台的项目是否有对包含后台代理的项目的引用?如果是这样,请检查该引用的属性,将 Copy Local 设置为 true。还要在那里检查 DLL 的路径是否正确。

于 2013-12-24T03:53:44.873 回答
0

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

看图片

于 2014-11-27T03:34:42.480 回答