代码改变世界

SharePoint:自定义开发内容的调试

2010-05-07 16:13  Leason Li  阅读(1736)  评论(0编辑  收藏  举报

       在SharePoint中进行开发,虽然局限比较多,但是能做的东西挺多,基本上看到的功能都可以定制化。在我们进行webpart或者Application Page(一个放在MOSS服务器_layouts目录下的.aspx页面,)的开发时,往往调试会比较困难。当然了webpart的开发的方式会有很多种,如直接写代码的类库方式和smartpart,quickpart的用户包装器包装.ascx的方式,这两种开发方式区别如下:

      1:.net类库的webpart,都是一些.CS源码文件组成,所以的控件和样式,都需要手动的在这里写代码来生成,这样的话,如果一些样式比较复杂,控件比较多的页面,工作量是比较恐怖的,而且很不直观,一般需要写好页面的HTML后转化为.CS的形式。当然好处是调试比较方便:

 a:把生成后的.DLL拷入到MOSS相关的网站bin目录(如:C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin)

 b:把该webpart部署到MOSS网站的一个页面中(部署方式网上太多,我这里就不细讲了),

 c:最后直接附加到w3wp.exe进程(一般服务器上的w3wp.exe进程可能会有很多个,如何区分当前运行的MOSS网站是属于附属在哪个w3wp.exe进程上的呢?方法是:开始/运行/输入 cmd/键入 iisapp,即可出现如下页面,选择正确的即可),设置断点,打开webpart所在的页面,按F5,开始调试。

       2:用户包装器包装的webpart,这里我主要是用quickpart。这个包装器主要用来包装.ascx用户控件,就没法直接附加到w3wp.exe进程中进行调试,大家都知道.ascx用户控件是没法独立运行的,必须附属到一个.aspx页面,传统的开发方式是,用VS创建一个网站,然后添加一个用户控件新项,再往.ascx页面拖控件,写样式,在.cs文件写业务逻辑(也可直接写在.ascx页面,好处是不用编译,直接把该页面拷入C:\Inetpub\wwwroot\wss\VirtualDirectories\80\wpresources文件夹就可被quickpart包装)然后以单页程序集的形式发布(如下图)。最后

a:把发布后(注意一定要是发布后的.ascx--这个文件在发布网站时的”目标位置“下,而不是当前网站下)的.ascx拷入  C:\Inetpub\wwwroot\wss\VirtualDirectories\80\wpresources目录,否则会出错。

b:把发布后生成的单页程序集拷入到C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin目录下:如App_Web_webusercontrol.ascx.cdcab7d2.dll

部署好之后,就可以在MOSS页面上用quickpart控件包装器添加这个webpart了,OK,这些都没有问题,都很简单,但是当我们需要对这个webpart进行更改和调试的时候怎么办呢?我们需要在VS中修改这个.ascx文件,然后再把a和b再做一遍,这时就不能直接附加到w3wp.exe进程中进行调试了,需要在VS中新建一个.aspx页面,然后把这个.ascx用户控件注册到该页面,借助这个页面来进行调试,也就是调试是在当前VS下的网站上进行的,而不是sharepoint环境中,然后利用a和b的步骤来部署,修改--调试---ab步骤部署,恶性循环非常的麻烦,最主要的是这个时候当前VS里面的这个网站不是在sharepoint环境(虽然在sharepoint服务器上)中的,如果这个时候用到一些sharepoint的控件,如SPGridview(在需要分页的情况下),DateTimeControl(在开发application page的时候会经常用到这个时间控件)则需要把该控件所在的页面拷到_layouts目录下才能正常使用,非常麻烦,而且这个时候根本没有办法调试,这里有另外一个方法来解决这个问题,使当前vs下的网站能在sharepoint环境中运行,这样就可以直接在VS下的网站中的某个.ASPX页面直接使用以上提到的控件并直接使用和调试,步骤如下:
a:打开IIS,在你的sharepoint应用下面新建一个虚拟目录,比如说我的应用是建立在80端口下的,然后再sharepoint-80【右键】【新建】【虚拟目录】,在选择路径的时候选中你上面新建的web网站,完成之后就可以了,也就是说你的这个网站在sharepoint的环境中了。
b:在VS下的网站中,打开需要调试的.aspx页面设断点,启动调试,你就会看见断点停在你设的地方了,可以调试了。

这样也不用拷来拷去了,直接在VS中的网站上开发,调试好了application page 和.ascx用户控件后,在拷入到相应的目录即可。既享受到了VS中调试带来的便利也享受到了用用户包装器开发webpart带来的好处。