一个晦涩难懂的谜题,但它让我彻底发疯:

我正在 MOSS 中创建自定义信息管理策略。我已经实现了 IPolicyFeature,并且我的策略功能很高兴通过配置新的 SPItemEventReceiver 来注册自身。我的图书馆中的所有新项目都会按其应有的方式触发事件,并且一切正常。

IPolicyFeature 还有一个方法 ProcessListItem,该方法应该追溯地将策略应用于库中已有的项目(至少,只要它不断返回,它就应该这样做) true)。但事实并非如此。该政策仅适用于 第一的 图书馆里的项目,我完全不知道为什么。

它似乎没有抛出异常,并且它确实从处理第一项返回 true,我想不出还有什么可看的。任何人?

编辑:下面科里的回答让我走上了正轨。其他东西确实失败了——我不知道是什么,因为我的 Windbg-fu 不是它应该的样子,但我怀疑它类似于“在迭代时修改集合”。我的代码修改了传递给 ProcessListItem 的 SPListItem,然后对其调用 SystemUpdate;一旦我更改了代码,以便它创建了自己的变量(指向完全相同的 SPListItem)并使用它,问题就消失了......

有帮助吗?

解决方案

我能想到的只有几件事可以尝试。首先,您是否在可以使用 Visual Studio 进行调试的机器上进行开发?所以只要逐步完成它即可。

假设情况并非如此 - 我要做的是在注册策略之前启动 WinDBG 并将其附加到进程。打开第一次机会异常,以便在发生异常时它会中断。一旦它被破坏,你可以通过发出命令“sxe clr”来做到这一点。以下是有关 WinDBG 的更多信息:

http://blogs.msdn.com/tess/archive/2008/06/05/setting-net-breakpoints-in-windbg-for-applications-that-c​​rash-on-startup.aspx

然后我要做的就是观察第一次机会抛出的异常,并执行 !PrintException 来查看发生了什么。我的猜测是,某个地方抛出了异常,导致应用程序停止处理其他项目。

ProcessListItem 的逻辑是什么样的?您是否尝试过仅返回 true 以确保其有效?

其他提示

有一些不错的想法,谢谢。Visual Studio 调试器没有显示异常(并且我已将所有内容包装在 try/catch 块中以防万一),但我没有想过尝试 Windbg...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top