1

一个不起眼的谜题,但它让我绝对发疯:

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

IPolicyFeature 还有一个 ProcessListItem 方法,它应该将策略追溯应用到库中已经存在的项目(至少,只要它不断返回,它就应该这样做true)。除非它没有。它只将该策略应用于图书馆的第一项,我完全不知道为什么。

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

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

4

2 回答 2

1

我能想到的只有几件事可以尝试。首先,您是否在可以使用 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

然后我要做的是观察抛出的 First Chance 异常,然后执行 !PrintException 以查看发生了什么。我的猜测是某处引发了异常,导致应用程序停止处理其他项目。

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

于 2008-09-05T20:11:12.057 回答
0

那里有一些好主意,谢谢。Visual Studio 调试器没有显示异常(为了以防万一,我将所有内容都包装在 try/catch 块中),但我没想过尝试 Windbg ...

于 2008-09-06T09:20:00.400 回答