Sharepoint功能升级

时间:2012-01-06 17:31:59

标签: sharepoint-2010

我在feature.template.xml

中有以下内容
...
 <VersionRange BeginVersion="1.0.0.1" EndVersion="1.0.0.2">
      <CustomUpgradeAction Name="1.0.0.1_TO_1.0.0.2"></CustomUpgradeAction>
    </VersionRange>
     <VersionRange BeginVersion="1.0.0.2" EndVersion="1.0.0.3">
      <CustomUpgradeAction Name="1.0.0.2_TO_1.0.0.3"></CustomUpgradeAction>
    </VersionRange>
...

我的功能升级事件如下:

public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        {
            using (SPSite site = (SPSite)properties.Feature.Parent)
            using (SPWeb mySite = site.RootWeb)
            {
                switch (upgradeActionName)
                {
                    case "1.0.0.1_TO_1.0.0.2":
                       //execute logicA
                       break;
                    case "1.0.0.2_TO_1.0.0.3":
                       //execute logicB
                       break;
                    default:
                       break;
                  }
             }

我说的是,如果该站点当前是1.0.0.0版本,它将升级到v 1.0.03,执行上面的logicA和logicB。这意味着sharepoint会为每个版本升级调用featureupgrading事件。这是正确的吗?或者我需要做一些不同的事情来实现这个目标吗?

我也有以下问题:

  • BeginVersion和EndVersion究竟是什么意思。
  • 我特别不了解BeginVersion。如果不是1.0.0.2而是将其设置为1.0.0.1会发生什么?

任何帮助都会受到高度赞赏,因为我没有在网上或书上找到任何好的相关细节。

1 个答案:

答案 0 :(得分:3)

向VS SharePoint项目添加新功能时,Visual Studio会使用版本0.0.0.0初始化功能 在属性窗口中,您可以设置功能的版本号。 如果要升级现有功能,则必须定义要进行升级操作(代码,新清单,...)的版本范围。

例如:您在不更改版本号的情况下部署了您的功能。您当前部署的功能版本号为0.0.0.0。 您希望升级功能并将版本号设置为2.0.0.0。

如果您按如下方式定义版本范围:

<VersionRange BeginVersion="1.0.0.0" EndVersion="2.0.0.0">

当你调用SPFeature.Upgrade()时,你会发现什么都不会发生,因为0.0.0.0不在定义的版本范围内。

如果您使用此版本范围

<VersionRange EndVersion="2.0.0.0">

<VersionRange BeginVersion="0.0.0.0" EndVersion="2.0.0.0">

您会注意到您的FeatureUpgrading事件接收器或其他升级操作将被触发。 您升级的功能现在的版本号为2.0.0.0 如果再次调用SPFeature.Upgrade,则不会再发生任何事情,因为2.0.0.0超出了定义的版本范围。所以包括BeginVersion,EndVersion不包括。
如果使用后一版本范围,则每个版本号介于[0.0.0.0 - 1.x.x.x]之间的功能都将升级。

我认为您也可以完全保留BeginVersion和EndVersion属性。然后,您将在每次SPFeature.Upgrade()调用时触发upgradeactions。 (待验证)

欲了解更多信息:Chris O'Brien写了一篇关于这个主题的有趣文章系列,cfr。 http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html