0

我正在做一场噩梦,试图调试 Sharepoint 列表的事件接收器。这是我正在做的代码:

//Add an event receiver to the list
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, "DatasEvent, Version = 1.0.0.0, Culture = neutral, PublicKeyToken =  6f4db1e1fedbed57", "DatasEvent.DatasEventReceiver");

public override void ItemAdded(SPItemEventProperties properties)
{
    try
    {
        int itemIdSql;
        SPListItem item = properties.ListItem;
        ...
    }
    catch (SqlException ex)
    {
        Debug.WriteLine(ex.Message);
    }
}

如果我在事件接收器中放置一个断点,它将不会停止。

4

6 回答 6

2

转到您的 Visual Studio 调试 -> 附加进程 -> 在列表中附加所有可用的 w3wp.exe。现在尝试在网络浏览器中激活该功能。你的断点应该被加载并命中。

于 2011-11-11T15:22:34.997 回答
1

我个人更喜欢将 System.diagnostic.debug.WriteLn() 消息添加到事件接收器代码中,并使用服务器上的 DebugView 查看它们。每次都附加到工作进程很烦人。

于 2011-11-11T16:12:17.127 回答
0

我会尝试:

Debugger.Launch();

只能在开发环境中,否则它会尝试为每个请求进行调试。

我会把它放在添加事件接收器之前。

于 2011-11-11T16:48:09.247 回答
0

首先确保最新的程序集版本能够到达 GAC。最简单的方法是使用项目上下文菜单中的“部署”选项或直接按 F5。

那么请让我们知道这个代码分配在哪里

//向列表中添加一个事件接收器 list.EventReceivers.Add(SPEventReceiverType.ItemAdded, "DatasEvent, Version = 1.0.0.0, Culture = Neutral, PublicKeyToken = 6f4db1e1fedbed57", "DatasEvent.DatasEventReceiver");

如果将其放置在功能接收器中,请确保在尝试附加到与目标 Web 应用程序对应的应用程序池对应的 w3wp.exe 之前将其激活。

于 2011-11-15T15:21:29.510 回答
0

ItemAdded处理添加项目后发生的异步事件。执行是通过计时器作业(而不是在当前工作进程 w3wp 中)执行的。所以你应该附加到 OWSTIMER 进程来调试它。

于 2011-12-27T09:26:46.843 回答
0

您应该在两个 web.config 文件中启用 sharepoint 的调试。您应该使用 Debugger.Launch() 来停止运行时。例如,在部署和激活事件触发后(在 EventReceiver 的代码中有一个 Debugger.Launch() 命令),VS 会要求您调试代码。

不需要使用“附加到进程”,但它是另一种可能的调试方式。

这个链接对我帮助很大

于 2012-12-28T09:42:03.167 回答