2009-06-12 77 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

相關問題