摘要:偶以前做的项目里,曾经用C#写过一个Windows Service,当时觉得调试这个Service 实在是比较郁闷:我只有在 AdminTool的Service里启动我这个Service,然后再在VS.Net里的Debug-Process里找到进程,Attach上去,才可以开始调试,偶当时是在 Service 里放了一个 Timer实例,定时回调一个Scan 方法,Scan出需要处理的东东的时候,就新开个线程处理。当时Timer 设置的回调时间是每5s一次,有时候手慢点,Process还没有Attach上去的时候,子线程都已经处理完了。
当时就想,如果Windows Service 也能和WinForm App一样,设好断点,Push个F5就可以慢慢等着Run 到断点中断就爽了,可惜,WinService Proj 输出的是.exe,目前还没有办法作为引用加入到一个测试 Project的引用中去(JGTM 似乎提到过说以后exe 也可以作为类库被引用?那样就好乐,hehe)。
现在给出偶认为最舒服的解决方案:
1. 新建一个WinForm App 或者 Console App,随便,能执行就成。
2. 在这个Project 里加上和Windows Service 相同的Reference,比如System.ServiceProcess什么的。
3. 然后,在这个Project 上选择 “Add Exist Item”
4. 在Add Exist Item的文件选择对话框里,选定一个Windows Service Project中的cs 文件—别急着Open
5. 点Open 按钮旁边的乡下箭头,在列表中选择 “Link File”
6. 重复3-5,加入调试需要的所有文件
7. 现在,你可以在 Console 的 Main方法 或者 Win Form的Button-Click 事件里,慢慢地玩弄你Windows Service里的代码了。
这办法好处是不需要更改Win Service Proj 项目下的任何设置,你尽可以玩些Daily Build,Auto Test之类的应用,不需要担心项目设置不对。而且因为调试程序是以Link 方式连接Win Service Proj下的程序文件,在Test时候做的修改实际上就是对Win Service Proj 相应文件的修改—省得Copy了。
不过也有个小缺点,VSS会拒绝加入这个Project到Database,因为这个Proj的某些文件处于VSS DB的其它位置。不过也没有关系--把这个项目留在VSS 外面把。
...[
阅读全文]