0

为了为站点集合提供 webpart 和自定义 webtemplates,我需要创建自定义组。我通过以下方式做到这一点:

     using (SPSite site = properties.Feature.Parent as SPSite)
        {
            if (site != null)
                using (SPWeb rootWeb = site.RootWeb)
                {

                    try
                    {
                        rootWeb.AllowUnsafeUpdates = true;
                        rootWeb.SiteGroups.Add("Admins", site.Owner, site.Owner, "Admins");

                        try
                        {
                            SPGroup sp_grpAdmins = rootWeb.SiteGroups["Admins"];
                            SPRoleDefinition sp_rldAdmins = 
                            rootWeb.RoleDefinitions.GetByType(SPRoleType.Administrator);
                            sp_rldAdmins.Name = "Admin rights";
                            sp_rldAdmins.Description = "all";
                            rootWeb.RoleDefinitions.Add(sp_rldAdmins);
                            SPRoleAssignment sp_rlaAdmins = new SPRoleAssignment(sp_grpAdmins);
                            sp_rlaAdmins.RoleDefinitionBindings.Add(
                            rootWeb.RoleDefinitions["Admin rights"]);
                            rootWeb.RoleAssignments.Add(sp_rlaAdmins);
                            sp_grpAdmins.Update();
                            rootWeb.Update();
                        }
                        catch (ArgumentException argex)
                        {

                        }
        }
    }

如果我在 webpart 中添加此代码(用于调试示例 - 无法让事件接收器进行调试),则会创建该组。您是否知道如何调试功能事件接收器,或者如果存在限制,则无法在功能事件接收器中完成?非常感谢。

4

1 回答 1

0

您可以通过将 Visual Studio 附加到w3wp.exe来调试事件接收器。请注意,您应该手动激活您的功能,因为如果自动,这将在您的进程加载所有 DLL 之前激活。

我通常做的是安装站点。部署包。

在 Visual Studio 中按 Ctr+Alt+P(菜单->调试->附加到进程)。这将打开您机器上运行的所有进程。如果不存在w3wp.exe进程,请确保选中“显示所有用户的进程”和“显示所有会话中的进程”。在列表中选择所有w3wp.exe进程并单击附加。系统会询问您有关警告安全性的问题 - 只需单击“确定”(如果需要,可多次单击)。

连接后,在“站点集合功能”中手动激活带有事件接收器的功能。如果一切顺利 -> 这将停止,您可以继续调试。

如果万一它没有在事件接收器中停止,我建议你重新编译项目。再次打包并重新部署。完成 IIS 重置后 - 这将从 GAC 重置 DLL。

请注意,Visual Studio 项目应处于调试模式...

如果你有任何问题...

希望能帮助到你,

安德鲁

于 2013-01-22T12:36:03.477 回答