SharePoint 2010:从UI执行的功能接收器代码,而不是PowerShell或stdadm

时间:2010-09-25 12:25:59

标签: sharepoint sharepoint-2010

我有一个包含Web范围功能的WSP,其代码如下:

using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;

namespace Macaw.DualLayout.Samples.Features.DualLayoutSampleEmpty_Web
{
    [Guid("8b558382-5566-43a4-85fa-ca86845b04b0")]
    public class DualLayoutSampleEmpty_WebEventReceiver : SPFeatureReceiver
    {
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            using (SPWeb web = (SPWeb)properties.Feature.Parent)
            {
                using (SPSite site = (SPSite)web.Site)
                {
                    Uri uri = new Uri(site.Url + "/_catalogs/masterpage/DLSampleEmpty.master");
                    web.CustomMasterUrl = uri.AbsolutePath; // Master for all publishing pages
                    web.Update();
                }
            }
        }

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            using (SPWeb web = (SPWeb)properties.Feature.Parent)
            {
                using (SPSite site = (SPSite)web.Site)
                {
                    Uri uri = new Uri(site.Url + "/_catalogs/masterpage/v4.master");
                    web.CustomMasterUrl = uri.AbsolutePath; // Master for all publishing pages
                    web.Update();
                }
            }
        }
    }
}

我从Visual Studio 2010进行F5部署。 当我从UI激活该功能时,我会在功能代码中进入断点,执行功能代码。 当我从PowerShell激活该功能时:

Enable-SPFeature -Url http://myserver/sites/publishing/empty -Identity MyFeatureName -force -verbose

或使用STSADM:

stsadm -o activatefeature -name MyFeatureName -url http://myserver/sites/Publishing/Empty -force

我看到该功能已激活(在用户界面中),但我没有点击我的断点,并且没有执行功能接收器代码。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

如果使用powershell或stsadm,则该功能将不会在IIS工作进程的上下文中运行。调试时你将VS工作室附加到什么位置?

调试stsadm任务时,我通常会添加:

System.Diagnostics.Debugger.Launch();

代码,当命令运行时,系统将提示您附加调试器。原油但很容易。 (别忘了删除)

答案 1 :(得分:5)

- “默认情况下,运行Visual Studio SharePoint应用程序时,会在SharePoint服务器上为您自动激活其功能。但是,这会在调试功能事件接收器时导致问题,因为Visual Studio激活某个功能时它运行在与调试器不同的进程中。这意味着某些调试功能(如断点)将无法正常工作。

要禁用SharePoint中的功能的自动激活并允许正确调试功能事件接收器,请在调试之前将项目的Active Deployment Configuration属性的值设置为No Activation。然后,在Visual Studio SharePoint应用程序运行后,手动激活SharePoint中的功能。为此,请单击SharePoint中“网站操作”菜单上的“网站设置”,单击“管理网站功能”链接,然后单击该功能旁边的“激活”按钮,并正常恢复调试。“

来源:http://msdn.microsoft.com/en-us/library/ee231550.aspx