如何在SharePoint中更新列表的SPItemEventReceiver程序集版本?
我们有一个SPItemEventReceiver编译成它自己的组件 我们正在使用STSDev将此EventReceiver作为功能打包为SharePoint解决方案。我不是将SPItemEventReceiver分配给elements.xml中的特定ListTemplateId,而是链接feature.xml和programmaticaly中的ReceiverAssembly将SPItemEventReceiver分配给多个SPList项如何在SharePoint中更新列表的SPItemEventReceiver程序集版本?,sharepoint,event-receiver,Sharepoint,Event Receiver,我们有一个SPItemEventReceiver编译成它自己的组件 我们正在使用STSDev将此EventReceiver作为功能打包为SharePoint解决方案。我不是将SPItemEventReceiver分配给elements.xml中的特定ListTemplateId,而是链接feature.xml和programmaticaly中的ReceiverAssembly将SPItemEventReceiver分配给多个SPList项 public override void Fea
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
foreach (SPWeb web in site.AllWebs)
{
SPListCollection webListCollection = web.Lists;
foreach (SPList myList in webListCollection)
{
if (myList.Title == "Lab Reports")
{
SPEventReceiverDefinitionCollection receivers = myList.EventReceivers;
SPEventReceiverDefinition receiver = receivers.Add();
receiver.Name = "PostUpdateLabReport";
receiver.Assembly = "LabReportEventHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1111111111111";
receiver.Class = "LabReportEventHandlers.LabReportsHandler";
receiver.Type = SPEventReceiverType.ItemUpdated;
receiver.Update();
break;
}
}
web.Dispose();
}
}
我正在使用FeatureDeactivating执行与上述代码相反的操作,从列表中删除EventReceiver
问题:
我应该如何处理更新LabReportEventHandler并更改版本的未来事件
以下是我能想到的选项:
我不确定您想要升级什么,是希望新事件处理程序应用于旧列表还是仅应用于新列表 为了只升级新列表,您可以将程序集信息放在单独的文件中,在FeatureActivated方法中读取该文件,然后应用新值。升级时,只需更新单独的配置文件,任何新激活都将使用新的值和版本号 如果需要升级旧的事件处理程序,可以执行类似的过程,但在删除旧的事件处理程序之前添加新的功能接收器。如果您使用相同的方法执行此操作,则添加新处理程序和删除旧处理程序之间的时间将非常短,并且任何人在该确切时间添加项目的可能性接近于零。如果要一直归零,可以隐藏列表或使用附加的ItemUpdated事件处理程序检查升级是否正在进行,如果正在进行,则停止更新 因此,简言之: 对于新列表,请从外部文件读取程序集配置 对于旧列表,请在删除旧处理程序之前添加升级的程序集信息
.b也许您可以将易于更改的逻辑封装到一个单独的程序集中,供事件处理程序引用和使用。这样,事件处理程序本身就不必更改,只需将更新的“逻辑”程序集适当地部署到GAC或bin目录 嗯,,
jt我仅在需要同时执行程序集的(旧的和新的)版本时才使用程序集版本控制。我从来没有在事件接收器上需要这个。因此,我不会更改事件接收器的程序集版本。谢谢您的建议。我会看看是否可以做到这一点,但我不负责开发程序集,只负责部署和集成。Bjorn,所有现有列表以及所有新列表都应该使用相同的EventHandler。在这种情况下,您有一个更简单的任务。如前所述,只需让featureactivated receiver从单独的文件中读取配置,然后在删除旧接收器之前添加新接收器。如果你愿意的话,我可以在1月1日之后就如何做到这一点发表一篇文章。