【问题标题】:How can I debug a SharePoint EventReceiver with Remote Debugger?如何使用远程调试器调试 SharePoint 事件接收器?
【发布时间】:2009-06-26 06:42:08
【问题描述】:
我编写了一个 SharePoint EventReceiver (Windows SharePoint Services 3.0),并希望使用在另一台计算机上运行的 Visual Studio 2008 SP1 对其进行调试。我尝试了以下步骤:
- 安装事件接收器(我知道这可行,因为日志文件证明代码已执行)。
- 在 SharePoint 服务器的 GAC 中注册我的事件接收器类库(在调试模式下构建)。
- 在 SharePoint 服务器上启动 Visual Studio 远程调试监视器。
- 从本地计算机附加到 SharePoint 服务器上的进程 w3wp.exe。
不幸的是,Visual Studio 告诉我,我设置的断点不会被命中。我猜在将程序集安装到 GAC 时,调试符号(或调试所需的任何内容)都会丢失。
我可以做些什么来调试我的事件接收器?据我所知,通过自定义程序集扩展 SharePoint 的唯一方法是将它们部署到 GAC - 我在这里遗漏了什么吗?
最好的问候
奥利弗·哈纳皮
【问题讨论】:
标签:
sharepoint
remote-debugging
event-receiver
【解决方案1】:
您可以尝试手动将程序集的调试 (.pdb) 文件复制到目标计算机上的 c:\windows\assembly\MSIL\ASSEMBLYNAME\VERSION 文件夹并重新启动 IIS。
【解决方案2】:
我今天早上刚遇到这个问题。关于断点未命中,我遇到了同样的错误。就我而言,这是因为我附加了错误的 w3wp.exe 进程。如果您在服务器上运行了多个 w3wp.exe 进程 - 请确保您附加到正确的进程以进行调试。
顺便说一句-您没有提到在您的步骤中的任何地方运行iisreset。将收到的自定义事件程序集复制到 GAC 后 - 确保运行 iisreset 以便 Web 服务器接收您的更改。
希望有帮助!!
【解决方案3】:
这个问题很老了,但我只想分享以下命令,以帮助选择正确的 w3wp.exe 进程。
假设您已经部署并启用了事件接收器。
在命令行执行这个命令
%windir%\system32\inetsrv\appcmd.exe list wp
这将打印 PID 以及它用于哪个站点的指示。
C:\Windows\system32>%windir%\system32\inetsrv\appcmd.exe list wp
WP "11632" (applicationPool:4a8cbf60637942ff9a2486d0e682ac54)
WP "16800" (applicationPool:SharePoint Central Administration v4)
WP "23648" (applicationPool:teams)
现在您可以轻松地将 Visual Studio 调试器附加到正确的进程。
例如对于 SP 站点 teams,我将附加到 PID 23648