SharePoint 2010: код получателя функции, выполняемый из пользовательского интерфейса, а не из PowerShell или stdadm - PullRequest
5 голосов
/ 25 сентября 2010

У меня есть 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();
                }
            }
        }
    }
}

Я делаю F5 развертывание из Visual Studio 2010. Когда я активирую функцию из пользовательского интерфейса, я попадаю в точку останова в коде функции, код функции выполняется. Когда я активирую функцию из 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 ]

6 голосов
/ 27 сентября 2010

Если вы используете powershell или stsadm, эта функция не будет работать в контексте рабочего процесса IIS. К чему вы присоединяете VS studio при отладке?

При отладке задач stsadm я обычно добавляю:

System.Diagnostics.Debugger.Launch();

к коду, и вам будет предложено присоединить отладчик при запуске команды. Грубый но легкий. (Не забудьте удалить)

5 голосов
/ 26 сентября 2010

- "По умолчанию, когда вы запускаете приложение Visual Studio SharePoint, его функции автоматически активируются для вас на сервере SharePoint. Однако это вызывает проблемы при отладке приемников событий компонента, поскольку при активации компонента Visual Studio , он запускается в процессе, отличном от отладчика. Это означает, что некоторые функции отладки, такие как точки останова, не будут работать правильно.

Чтобы отключить автоматическую активацию функции в SharePoint и разрешить надлежащую отладку приемников событий объектов, установите для свойства конфигурации активного развертывания проекта значение Нет активации перед отладкой. Затем, после запуска приложения Visual Studio SharePoint, вручную активируйте эту функцию в SharePoint. Для этого нажмите «Параметры сайта» в меню «Действия сайта» в SharePoint, нажмите ссылку «Управление функциями сайта», а затем нажмите кнопку «Активировать» рядом с этой функцией и возобновите отладку в обычном режиме. "

Источник: http://msdn.microsoft.com/en-us/library/ee231550.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...