【发布时间】:2014-02-02 11:34:51
【问题描述】:
我们有一个 SPItemEventReceiver 编译到它自己的程序集中。
我们正在使用 STSDev 将 SharePoint 解决方案与此 EventReceiver 打包为一项功能。我没有将 SPItemEventReceiver 分配给 elements.xml 中的特定 ListTemplateId,而是在 feature.xml 中链接一个 ReceiverAssembly 并以编程方式将 SPItemEventReceiver 分配给多个 SPList 项。
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。
问题:
以后LabReportEventHandlers更新,版本发生变化,我应该如何处理?
这些是我能想到的选项:
停用/重新激活功能 -- 我会将更新后的 dll 包装回 SharePoint 解决方案文件,更改上面的代码以反映新版本,然后使用 stsadmin 升级解决方案。然后我会停用/重新启用该功能。
将程序集重定向添加到 web.config。
不要碰 LabReportEventHandlers 版本号。
更改解决方案版本对我有帮助吗?
我认为这3个选项有问题:
停用该功能后,有人可以在我做出反应之前更新项目。
我不想手动编辑 web.config,所以我会改用 sharepoint API。我将在哪里运行该代码?
这完全是错误的,但很容易。
【问题讨论】: