sharepoint调试EventHandler经验小计
微软的Visual Studio 2008 开发工具为sharepoit开发带来很大的方便,特别工作流的开发调试,让你立马将Visual Studio 2005 扔到垃圾桶去。
某天,我轻易答应了一件事:
“某部门每月都要收集下面机构报上来的空白单据领用数,这是用EXCEL填报的,那么某部门就有一个人每月汇总一下这些领用表,效率可想而知是很低的。我吹嘘说这是小事一桩,于是接了这个事。”
真是说易做难,我的做法是用Infopath表单让下属机构填报,然后在后台捕捉ItemAdded和ItemDeleting事件(不让他们修改,太烦啦),在事件中登记或退回本月领用数。
调试是这样的:
1. gacutil /i MyEventHandler.dll
2. 使用SharePoint Tips Utility Pack注册事件
3. 使用vs2008附加到w3wp.exe(托管类型),打开页面开始调试。
问题出现了:
A. 程序运行跟vs2008中显示的源代码流程走向不一致,就是说符号表不对。
B. 有时附加上了w3wp.exe,但是说当前断点不会到达,这是怎么回事。
第一个问题就是w3wp.exe的.net runtime的池子里的MyEventHandler.dll跟我修改过的程序版本不一致,最简单的办法是:
(1)gacutil /uf MyEventHandler
(2) iisreset
(3) gacutil /i 新的dll
第二个问题后来我想明白了,就是w3wp.exe的进程空间中没有MyEventHandler.dll,那怎么才能让它有呢?办法就是想办法让它load进内存,再来附加w3wp.exe,那就可以啦。我是打开页面,填一个表单,让事件发生一次,MyEventHandler.dll就会调进内存。因为.net运行时可能会卸下MyEventHandler.dll,如果时间太长,你可能又附加不上去。