ipark's blog[MVP SharePoint]

SharePoint related...
随笔 - 23, 评论 - 123, 引用 - 3

导航

关于

My Old Blog: http://freepark.cnblogs.com Email:ipark.cn@gmail.com




Locations of visitors to this page



Creative Commons License

标签

每月存档

最新留言

广告

[Best Practice]WSPBuilder和QuickPart合作进行Web Partk可视化开发与部署的好方法

QuickPart

QuickPart大家都知道是我们大名鼎鼎的Kaneboy同学的大作,是用户控件包装器的杰出代表,是进行可视化Web部件开发的重要工具。

使用QuickPart的一般过程是:

1)先创建一个Web工程,新建用户控件,然后编译发布网站,得到我们需要的ASCX和dll文件;

2)部署QuickPart,并在网站上激活QuickPart Feature;

3)把Web应用程序的Trust Level该成可以使用Web部件;

4)把ASCX拷贝到Web应用程序的wpresources文件夹下,把dll拷贝到相应的bin目录下;

5)在网站上添加QuickPart,编辑属性,选择相应的ASCX文件;

6)现在,你可以使用包装好的用户控件了。

我想QuickPart再方便点

如果,我们想自动把开发的用户控件和dll部署好,然后能直接在网站上拖入一个包装了用户空控件的QuickPart就能使用了,添加Web部件的时候,丝毫感觉不出来是使用了QuickPart,那我们该怎么办呢?

我们首先需要了解一下Web Part的dll和.webpart文件的关系:

image

同样的一个QuickPart.dll,使用不同的.webpart描述文件可以把其描述成不同的Web Part。在.webpart文件里面指定WrappedUserControlPath就可以设置默认加载的用户控件了,再在.webpart文件里设置一个有意义的Title,这样同样一个QuickPart.dll在你的Web Part选择页面中就会对应出现多个更有意义的可用Web Part了。

利用.webpart文件我们解决了在网站上添加QuickPart,再选择加载哪个User Control的麻烦。

我们还没有解决怎样自动把ASCX文件和dll拷贝到相应目录下的问题。

Solution里面的Assembly Element有一个子Element叫做ClassResources,用来部署程序集的资源,所以我们可以把ASCX文件作为dll的资源,使得WSP可以帮我们完成这个部署,比如我们要部署IparkDebugPartUC.dll这个用户控件的程序集,它对应的资源会在bin\wpresources\IparkDebugPartUC\路径下(注意路径最后的文件夹就是程序集的名称),所以,我们在WSPBuilder下创建如下的文件夹结构:

image

把dll拷贝到80\bin目录下,ascx文件拷贝到80\bin\wpresources\IparkDebugPartUC\路径下

利用Solution的Assembly以及ClassResource我们解决了自动拷贝部署ASCX和dll的问题。

WSPBuilder生成WSP文件的时候manifest文件里面会自动为程序集添加CodeAccess相关的设置,所以修改Web应用程序的TrustLevel也就不需要了。

---------------------------------解决方案开始了------------------------------

所以我们的解决方案就是:

1)首先根据“[Best Practice]如何在SharePoint团队开发中利用WSPBuilder”中介绍的,创建好一个WSPBuilder项目来做Web Part的打包部署调试;创建好需要的文件夹结构,添加一个WSPBuilder Blank Feature,形成如下类似的样子:

image 

注意,wpresources下面的文件夹必须和你要生成的用户控件所在的dll的名称一致。

2)创建一个Web Application项目,在项目里面创建一个.webpart文件,注意type这个metadata用来表示对应的dll是哪个,这里当然就是我们的QuickPart里面的包装器类型了。

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <!--
      The following Guid is used as a reference to the web part class,
      and it will be automatically replaced with actual type name at deployment time.
      -->
      <type name="Microsoft.PRC.SharePoint.ConsumerQuickPart, QuickPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2d0bb71b2dd16f9e" />
      <importErrorMessage>Cannot import Web Part.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">Ipark Debug Demo Web Part</property>
        <property name="Description" type="string">Ipark Debug Demo Description</property>
        <property name="WrappedUserControlPath" type="string">~\wpresources\IparkDebugPartUC\IparkDebugPartUC.ascx</property>
      </properties>
    </data>
  </webPart>
</webParts>

这样,这个Web Application项目就形如:

image

把IparkDebugPartUC.ascx和IparkDebugPart.webpart文件设置为Copy Always:

image

在项目属性的Build Events中添加Post-build命令:

copy "$(TargetDir)IparkDebugPartUC.dll" "$(SolutionDir)IparkSolution\80\bin\";
copy "$(TargetDir)IparkDebugPartUC.ascx" "$(SolutionDir)IparkSolution\80\wpresources\IparkDebugPartUC\";
copy "$(TargetDir)IparkDebugPart.webpart"  "$(SolutionDir)IparkSolution\12\Template\Features\IparkDebugPartFeature\";

3)修改WSPBuilder项目中IparkDebugPartFeature的elements.xml,在Elements节中添加

<Module Name="WebParts" List="113" Url="_catalogs/wp">
  <File Path="IparkDebugPart.webpart" Url="IparkDebugPart.webpart" Type="GhostableInLibrary" />
</Module>

4)好了,你的解决方案样子就变成了:

image

首先build一下IparkDebugPartUC项目,然后在“IparkSolution”上右键菜单中,点击“Build WSP”,生成WSP文件,然后在右键菜单中可以看到Deploy和Upgrade都变成可用了,然后你就可以deploy这个解决方案了。转到你的网站集,激活IparkDebugPartFeature,你就可以在网站的Web Part列表中找到这个Web部件了:

image

你可以在你的Web Application项目上右键菜单的WSPBuilder菜单中点击“Attach to IIS Worker Processes”,开始调试你的用户控件了。

image

当你刷新用户控件所在页面,你的Visual Studio就会开始Debug了:

image

---------------------------------解决方案结束了------------------------------

补充:使用这种方法,你不需要提前部署QuickPart,你需要做的只是把QuickPart.dll拷贝到WSPBuilder的80\bin目录下,WSP包会自动部署它的:

image

posted on 2009-01-16 14:15:01 by ipark  评论(2) 阅读(6038)

[Best Practice]如何在SharePoint团队开发中利用WSPBuilder

本文关注SharePoint开发的Assembly Development(何为Assembly Development,请参见http://msdn.microsoft.com/en-us/library/bb428899.aspx

WSPBuilder

到目前为止,我觉得WSPBuilder是SharePoint社区中最好的辅助开发工具之一(VSeWSS 1.3 CTP版本有一些功能就是“模仿”了WSPBuilder,呵呵)。

WSPBuilder的特点是根据文件夹结构来生成WSP文件,这是我个人觉得WSPBuilder最好的特性,也是最有用的功能。现在,CodePlex上WSPBuilder提供了Visual Studio Addin的安装项目,该Extensions也可以在Visual Studio 2008上使用,该Extensions使得WSPBuilder更好的融合到Visual Studio的开发操作中,安装完“WSPBuilder Extensions 1.03 - Visual Studio Addin (0.9.8.0830)”后,你打开Visual Studio可以有如下WSPBuilder项目:

image

在创建好的WSPBuilder项目后,右键点击项目可以看到以下WSPBuilder菜单:

image

以上菜单中,值得注意的是以下两个:

> Build WSP: 创建WSP文件,仅仅是创建而已,不会帮你部署!有很多时候我们其实只需要WSP文件(使用VSeWSS的人应该很希望VSeWSS也能这样)

> Attach to IIS Worker Processes: 不用在点好几步,然后查找w3wp.exe进程,然后附加了,只要点一下即可开始调试!

SharePoint的团队开发

在SharePoint团队开发,我感觉比较焦点的话题有几点:

0)团队开发怎么个模式比较好;

这个请先看看http://msdn.microsoft.com/en-us/library/bb428899.aspx

然后,我补充一点我个人的看法:

> 你会需要一个集中代码管理服务器,SharePoint开发集成环境,SharePoint测试服务环境,然后你会想要自动编译部署(WSPBuilder为你的这个愿望提供了很好的基础)

> 我偏向于程序员每个人都有自己的SharePoint开发环境(与生产环境相同的版本),环境中的Visual Studio有Web Application开发模板,安装WSPBuilder 的Visual Studio Extensions。

> 如果有条件开发人员的SharePoint环境使用虚拟机为好(如果SharePoint环境坏了,恢复快,好处肯定不止这个)。

> 另外,开发人员应该有一个非Windows Server的环境(用来自己做测试用,模拟一个真正的开发机和客户机环境,所有的开发测试都在SharePoint环境里面做是不明智的,很多时候你会发现当用客户机访问的时候,问题才能暴露)。也就是说,或者开发人员本机是非Windows Server环境,虚机是SharePoint开发环境;或者是本机是SharePoint环境,有一个非Windows Server的虚机环境。

1)开发的各种SharePoint部件(事件处理、Web Part、模板等)怎么方便的组合起来集成部署(知道用WSP,但是总是没有找到比较好的实施的方法);

做Solution Package的最主要的问题在于

a、如何正确的使用Solution Schema里的Element来部署不同的开发产出;

b、编写正确的manifest.xml文件,打包成WSP文件

WSPBuilder的好处就在于,你需要做的就是把开发出来的东西放对文件夹!其他一切交给WSPBuilder

使用WSPBuilder自己的模板创建出来的项目,WSPBuilder会自动生成正相应的文件夹结构

image

所以,我的做法是使用WSPBuilder项目加上Visual Studio的Post-Event来满足要求:

1、专门创建一个WSPBuilder Project,作为维护创建WSP文件的文件夹结构的项目(也就是说专门用来生成WSP文件的项目);

2、为不同的功能模块(某个Web Part、事件处理程序等)创建不同的项目,这样方便进行代码管理,工作分配,多人协作,创建的项目加入到第一步创建的解决方案中;

3、然后接着就是在WSPBuilder Project项目中,创建文件夹,直到每个功能模块对应的项目都能在该项目中找到相应的文件夹;对于每个功能模块对应的项目则在Post-Built中加入命令行脚本,使在编译通过以后,把编译的结果拷贝到第一步创建的项目的文件夹目录下。

---------------------------------例子开始了----------------------------

举个例子,你创建一个WSPBuilder的项目作为维护生成WSP文件的项目:

image

创建一个Web Part项目(用的是VSeWSS的Web Part模板),加入到解决方案中

image

在WSPBuilder项目中,添加一个叫DemoWebPartFeature的Blank Feature:

image

image

解决方案变成:

image

我会把自动生成的elements.xml文件删除,然后修改feature.xml文件:

把ElementManifests节改成以下样子:

<ElementManifests>
  <ElementManifest Location="WebPart1.xml"/>
  <ElementFile Location="WebPart1.webpart"/>
</ElementManifests>

然后在WSPBuilder项目中创建出80\bin目录,这时候解决方案样子如下:

image 

然后,对DemoWebPart项目做一些设置,首先把WebPart1.webpart和WebPart1.xml文件的属性改成“Copy Always”,这样在该项目的Debug目录中会出现这两个文件:

image

接下来,就是在Post-built中添加Copy命令行,把生成的文件拷贝到WSPBuilder项目对应的文件夹下:

copy "$(TargetDir)DemoWebPart.dll" "$(SolutionDir)WSPBuilder\80\bin\";
copy "$(TargetDir)WebPart1\WebPart1.xml" "$(SolutionDir)WSPBuilder\12\Template\Features\DemoWebPartFeature";
copy "$(TargetDir)WebPart1\WebPart1.webpart"  "$(SolutionDir)WSPBuilder\12\Template\Features\DemoWebPartFeature";

这样,整个项目的初始创建和设置就完成了,把项目迁入到代码管理服务器中,以后就不需要再改动这些设置了。

当你编译DemoWebPart项目的时候,WSPBuilder项目的文件夹下就会是如下样子:

image

在WSPBuilder项目的文件夹里面就已经有了所有DemoWebPart相关的文件了,然后我们可以在WSPBuilder项目中创建WSP文件(Deploy和Upgrade菜单在第一次点击Build WSP后才会变成可用)

image

所有在WSPBuilder解决方案中的项目右键点击都会出现以上菜单,可以方便的点击“Attach to IIS Worker Processes”来调试。

---------------------------------例子结束了----------------------------

这样的话

> 开发人员的工作过程就是:从代码管理服务器上获取解决方案的最新版本,然后迁出自己开发的项目,直接选择Deploy Solution,WSP会生成并自动部署到他的环境中,然后在代码中设置断点,点击“Attach to IIS Worker Processes”即可进行调试。

> 集成人员的工作过程:从代码管理服务器上获取最新的项目版本,然后Build WSP,把WSP部署到开发集成服务器上。这个过程,大家可以想象,使用自动build部署的方案完全是可以完成的。

2)可视化Web Part开发的最佳实践;(下一篇文章,我会介绍一个WSPBuilder和QuickPart合作进行Web Part开发的好方法)

posted on 2009-01-15 23:55:07 by ipark  评论(8) 阅读(6491)

Powered by: Joycode.MVC引擎 0.5.2.0