2009-06-12 98 views
8

我正在创建我的第一个计时器作业并希望对其进行调试。我通过一项功能安装了计时器作业,并将其添加到Web应用程序的JobDefinitions集合中,并添加了一个SPMinuteSchedule,以每5分钟运行一次(用于测试目的)。调试Sharepoint计时器作业

然后,在Visual Studio中,我尝试将调试器附加到WebApplication的进程,中央管理进程和OWSTIMER.exe进程,但它不会调试到TimerJob的执行方法。我在这里错过了什么。

P.S.计时器作业状态说成功,所以它正在运行。奇怪...

回答

9

当我在调试TimerJobs时,我在Execute方法的第一个开始插入一个Assertion,它总是失败。这会导致每次调用Execute方法时都会弹出一个消息,因此您可以确保TimerJob已启动并且有足够的时间来连接调试器。当然,你必须在你上线之前删除断言。

System.Diagnostics.Trace.Assert(false); 

更重要的是,您在部署新的DLL后重新启动计时器服务。否则,定时器服务将从旧的DLL运行TimerJob。

2

最常见的原因:

  1. 你做调试版本?
  2. 您是否将.pdb文件放置在与程序集相同的文件夹中? (一个简单的search应该解释如何 - 例如。Debugging Timer Jobs
  3. 也阅读MSDN上的Debugging Custom Timer Jobs的一些提示。
  4. 执行3个R:重新构建&重新部署程序集&在尝试重新附加之前重置计时器服务。
+0

新增的Debug.Assert的= false时,重新启动我的机器,但OWSTimer没有加载我PDB(我甚至它复制到C:\ WINDOWS \ assemly \ GAC_MSIL \ <的AssemblyName> \ 文件夹? – Colin 2009-06-12 09:17:31

+0

重建项目,用windows资源管理器手动删除组件,然后手动复制文件与资源管理器,然后再次复制pdb,并调试挂钩进程... – Colin 2009-06-12 09:24:07

+0

道歉忘了提及通常的重建/重新部署/重新启动过程中,将编辑答案:) – mundeep 2009-06-12 13:15:34

相关问题