我有一个包含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
我看到该功能已激活(在用户界面中),但我没有点击我的断点,并且没有执行功能接收器代码。
有什么想法吗?
答案 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中“网站操作”菜单上的“网站设置”,单击“管理网站功能”链接,然后单击该功能旁边的“激活”按钮,并正常恢复调试。“