我的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,它将升级到v1.0.03,同时执行上面的logicA和logicB。这意味着sharepoint会将每个版本的upgrade.Is的功能升级事件称为正确吗?还是我需要做一些不同的事情来实现这一点?
我也有以下关注:
任何帮助将不胜感激,因为我没有找到任何良好的相关细节在网上或书籍。
发布于 2012-10-26 09:54:59
当您向VS SharePoint项目添加新特性时,Visual将使用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()调用中触发。(待核实)
更多信息: Chris‘’Brien写了一个关于这个主题的有趣的文章系列cfr。http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html
https://stackoverflow.com/questions/8761928
复制相似问题