我们有一个复杂的场景,需要一个计时器作业在内容部署到一个SP 2010站点集合后运行。计时器作业会自动取消/重新激活一个品牌特性,该功能负责为站点集合设置母版页等。
在此过程中,我们进行了几次功能升级,并且忽略了在特定站点集合中调用功能的.Update()。所以所有更新的CSS,母版页,页面布局等都过时了。
奇怪的是,当我在这个SC中检查该特性的版本号时,它显示为最新版本。自定义升级操作显然没有运行和更新文件,因为没有人调用.Upgrade()。
我的一位同事建议,由计时器工作完成的停用/重新激活过程将更新版本号,这意味着我无法再调用升级()!
发布于 2014-06-18 08:03:40
1:不。功能失活/激活不会触发更新。参见克里斯·奥布莱恩的这篇文章:http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html
功能升级不会自动进行(包括功能被停用/重新激活时)!升级特性的唯一方法是调用SPFeature.Upgrade(),通常与QueryFeatures()方法之一结合使用。我将继续讨论的工具是一个自定义应用程序页面,它可以帮助您完成这个部分--注意,这里没有STSADM命令、PowerShell cmdlet或用户界面。
您的计时器作业是否循环了Force的功能激活?然后,是的,它触发了功能升级/功能更新--请参阅来自SPFeature.Activate的以下屏幕快照(请参阅我的黄色标记):

为什么功能版本会增加,我不确定。当您有一个特性时,安装一个新的功能版本并激活/停用,除非您运行升级,否则该功能版本将保持不变,请参见以下相关问题:https://sharepoint.stackexchange.com/questions/41476/feature-upgrading-question
我猜你的计时器工作是使用force?否则我不太清楚发生了什么。
On 2:不知道是否有可能减少版本号,但最安全的方法是创建一个新版本,其中包括一个大的“清理”功能接收器,它设置了所有正确的功能,即检查已经发生了哪些升级步骤(例如,创建了新列表,添加了新的内容类型),以及没有执行的步骤。取决于此,只需再次执行尚未执行的步骤。对于后一部分,您可以幸运地使用现有代码,因此只需要“清理”或检查代码。
发布于 2014-06-18 18:34:44
经过一些测试后,我发现简单地去激活和重新激活这个功能会增加版本号,并且完全破坏了您的升级!我甚至在内容数据库中看到了更新。一旦禁用/重新激活更新的功能,新版本号就会弹出到内容数据库中。当然,升级并不实际运行,它只是增加版本号。
这意味着如果调用.Upgrade(),它将无法工作,因为SharePoint认为它已经升级了!!
为了解决这个问题,我更新了内容数据库中的行,将该特定web的功能版本设置为0.0.0.0,然后我可以运行.Upgrade() --只运行fine....but --这并不完全是一个受支持的解决方案。如果其他人有更好的主意,就放弃答复。
https://stackoverflow.com/questions/24274078
复制相似问题