在回答这个仁者见仁的问题之前,我先来解释一下什么是SharePoint解决方案包(Solution Pack)。
在SharePoint上做开发时,我们会发现,所开发的某个功能或某套功能基本都可以分为如下几个方面:
1、特定化的SharePoint列表模板及其实例
SharePoint提供了非常灵活的数据存储容器:列表,所以我们经常借助这些列表(或文档库)来实现我们的功能。
而且,有的时候我们正在开发的功能就是用来管理某些列表或文档库的。
2、特定化的网站模板
有可能我们所开发的功能非常大,所以需要一个特殊的SharePoint网站来呈现。
3、Web部件
我们可以把功能特定的Web部件放到需要的页面上,以此来拼装呈现给用户的最终UI。
4、事件处理程序
除了用Web部件来与用户进行UI的交互之外,我们可能还需要监控网站数据的变化,所以事件处理程序有时也不可缺少。
5、自定义的操作
SharePoint在自己的界面上提供了大量的管理操作按钮、菜单、链接,我们开发的内容也可能需要在其中加载自己的操作。
6、其他的种种…………
综上,可以看到,一套自己开发的SharePoint解决方案可能包含各种各样的内容:功能(这个功能指的就是SharePoint的“功能”了,也就是Feature),程序集,Web部件属性说明文件,列表或网站模板等等等等。如何把这一大堆内容一次性安装到SharePoint环境中,而不必一个一个的部署呢?
答案就是:SharePoint解决方案包(SharePoint Solution Pack)
一个SharePoint解决方案包就是一个后缀为.wsp的文件,这个文件其实就是一个.cab文件,里面包括了前面提到的一个大功能所包含的所有小方面。
部署的时候,只需要执行命令行操作:
stsadm -o addsolution -filename <path>\YourSolution.wsp
这个解决方案包就被添加到SharePoint服务器场上了
我们再进入SharePoint管理中心,在“操作”选项卡中选择“解决方案管理”,就可以对这个解决方案进行最终部署,部署后,所有里面包含的功能和程序就都发布到SharePoint网站中了。非常非常的方便。
于是,回到了本文标题的问题,如何把我们的开发工程打包成一个SharePoint解决方案包,生成出这个.wsp文件呢?
方法有很多,我以前经常参考的方法是Andrew的方式,利用VS2005和makecab.exe生成wsp文件:
http://www.andrewconnell.com/blog/articles/UsingVisualStudioAndMsBuildToCreateWssSolutions.aspx
但这种方式略为复杂了一些。
杜伟经常用的方法是自己写那堆配置文件,或者借助某些第三方cab生成工具进行打包。
但这都无法避免去直接操作那些并不复杂但有些繁琐的xml文件。
昨天,我百无聊赖地随便乱搜,找到了刚刚发布不久的一个开源命令行工具WSPBuilder,它的作者是Carsten Keutmann(不过好像SharePointBlogs连同SharePointu一起挂掉了)
今天试了一把,非常好用。借助这个命令行工具,你只需要把你的解决方案中涉及到的所有文件都按最终部署路径排好,然后运行这个命令行程序,wsp文件就会自动生成出来。
举例如下:
我开发了一个小功能,里面涉及到一个Web部件和一个自定义了字段的列表。
首先把Web部件的dll编译好,以及描述这个Web部件属性webpart文件准备好。
然后制作出能够自动生成出这个自定义列表的Feature(这个过程我会在下一篇博客文章中介绍给大家)
打包过程如下:
1、创建了一个文件夹名为“FavouriteResult”。
2、在这个文件夹下面创建了“12”和“80”目录。
3、在“80”目录下,我放置了带有上述dll的bin目录,和带有webpart文件的wpcatalog目录。
4、在“12”目录下,创建“Template\Features”路径,并把我自己开发的Feature放在这个路径里。
5、把WSPBuilder工具的两个文件(一个exe,一个dll)拷贝到FavouriteResult文件夹里。
6、双击WSPBuilder.exe。
7、我需要的wsp文件就生成出来了。
接下来的操作就是用命令行添加这个wsp文件,再在管理中心里部署这个Solution了。
注意,由于这个命令行工具是个老外开发的(好像是德国的),所以,用来生成wsp文件的这个路径(在这个例子里就是FavouriteResult文件夹)不能夹杂中文。不过这是一个开源项目,有兴趣的话,你也可以给完善一把。
总之,这个程序是我最近遇到的最棒的SharePoint工具,大家如果有需要制作SharePoint解决方案包的话,不妨试一试。
转自:http://blog.csdn.net/wendy1001/archive/2007/08/14/1743031.aspx