2009年1月18日星期日

如何使用VS2008做SharePoint 2007的Web Part开发

关键字:WSS3.0, WebPart
摘要:本文主要介绍如何使用VS2008做WSS3.0下的WebPart部署。

有一个项目是采用MOSS 2007做框架进行开发,感觉MOSS确实很强大,不过也有很多麻烦之处。最近专注于使用Web Part作功能扩展,其间也遇到了一些问题,来这里和大家分享一下。

VS2008有一个SharePoint extension for VS2008提供了开发Web Part, Feature, 和Site Defination等的模板,但有一个缺点是它必须安装在Windows 2003和WSS 3.0上,可通常我们做开发都是使用的Windows XP或Vista,这就造成了不小的麻烦。MSDN中推荐使用虚拟机来做开发,这的确是个很消耗资源但比较有效的方法。目前我就是使用这种方法。

另外,SharePoint extension for VS2008可以直接部署到本地的SharePoint的80站点中。要想Deploy到其它站点上,我还没有找到方法。它在布置时会生成一个setup.bat文件,但如果不在本地机部署的话,就不能生成这个文件。

即然如此,只好找最原始的部署Web Part的方法了。MSDN上有一篇"Deploying Web Parts in Windows SharePoint Services"我根据我的理解整理了一下,下面是具体的方法。

我使用的机器名为A,其上有一个虚拟机B,A使用的是Vista系统,B使用的是Win2003。
  1. 在A上使用VS2008开发好Web Part后,编译生成WebPart的DLL文件WebPartProject1.dll。
  2. 将这个dll文件放置在站点的bin目录中,或GAC(C:\Windows\assembly)中均可。如果这个Web part只适用于某个Site的话,放在其bin(%SYSTEMDRIVE%\inetpub\wwwroot\wss\VirtualDirectories\\bin)目录中较为合适。SharePoint 2007中,每个Application下有一个_app_bin目录,大家一定要注意:不要将此目录当成bin目录。如果没有bin目录,则需要手动创建一个。这个目录是SharePoint预留的。我将dll放在了bin中。
  3. 我把B上的Web Application的目录设置了共享,并在开发机A上Map了一个驱动器给它。这样可以在Build Web Part project时,直接使用Build-Events中的DOS命令将DLL直接发布至bin目录中。
  4. 接下来,如果按照MSDN那篇文章的作法,应该是创建一个WebPart1.webpart文件,然后按下图所示的格式写XML。下图的代码是直接从msdn上copy过来的,需要更metadata部分和title以及Description部分的内容。
然后将这个WebPart1.webpart文件上传至要发布的站点的WebPart的Catalog目录中。结果是:失败!

上传是可以成功的,但当预览WebPart时,就会出现错误,问题出在CreateChildControls。然后在页面上添加这个Web part也会出现“assembly or codebase is invaild”类的错误。而且我的Web part代码异常简单,只是输出了“hello world”。因此可以断定问题是由于SharePoint没有找到DLL文件。

和dll文件配置有关的有两个地方,一个是web.config,一个是WebPart1.webpart。我又查看了Walkthrough: Creating a Basic Web Part 这个文档,发现可以不创建.webpart文件,而直接通过Web Part Gallery中的“New”来创建新的Web Part。这个功能会列出所有可用的Webpart的dll(列在web.config的SafeControl中的),然后选择其中的进行填加。通过这个功能我看到了我的WebPart1,然后选择了添加。这次可以成功预览了。

我对比了一下通过SharePoint导出的.webpart的XML文件,发现MSDN示例给的XML和这个有出入。在SharePoint导出的.webpart文件中,是这样设置type的:


我的理解是:首先是带namespace的class name,然后是class name。不知道正确与否。

在发布成功后,肯定需要调试。Web part以DLL发布的,因此要重新加载,必须重启IIS。这点也造成了不小的麻烦。

希望本文对朋友们开发MOSS 2007的Web Part有帮助。

2 条评论:

  1. 在MSDN上找到两篇article——Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0 ,放在首页“有用的链接”中。文章里提到了开发Web Part的方法和工具,可以参考一下。

    回复删除
  2. 发布DLL时有些小技巧:一般将Web Part的DLL直接发布到GAC目录中即可。当由于是dll,因此在发布了新的dll之后,先将GAC中原有的DLL uninstall掉,然后拖新的dll到GAC中,再重启IIS(必须重启IIS,否则一直调用的是旧的DLL)即可。

    回复删除