Должен ли SharePoint EventReceiver быть установлен в GAC, и если это так, то должны ли также все зависимые сборки? - PullRequest
5 голосов
/ 07 января 2011

Моя компания поставляет продукт, который, помимо прочего, регистрирует SharePoint EventReceiver в SPLists, отслеживая изменения. Я зарегистрировал его в GAC, где он работает просто отлично. Однако один из наших клиентов выразил недовольство установкой нашей сборки в GAC и пожелал, чтобы мы переместили наши двоичные файлы в каталог SharePoint BIN и выполнили вуду безопасности / доверия, которое требуется для этого сценария.

Когда я пытаюсь зарегистрировать приемник событий, которого нет в GAC, я получаю очень конкретное исключение, сообщение которого гласит: «Сборка приемника событий отсутствует в GAC». Я интерпретирую это как SharePoint, требующий установки приемников событий в GAC. Кроме того, я обнаружил это в MSDN: http://msdn.microsoft.com/en-us/library/ff407965.aspx: в разделе «Приемники событий и обработка событий» указано

Обработчики событий SharePoint Foundation скомпилированный модуль управляемый код, вызов которого вызвано указанным событием, которое вы указали. Код обработчика события компилируется в файл .dll и развернут в GAC.

Это снова подразумевает, но не означает, что установка GAC является обязательным требованием. Кто-то знает ответ на этот вопрос наверняка, поэтому я могу вернуться к клиенту и объяснить наше требование GAC?

Теперь возникает следующий вопрос: если у меня есть сборка в GAC, и я «статически связываюсь» с другими сборками - т.е. я не использую явную динамическую загрузку их с помощью Assembly.Load () - тогда эти другие сборки также должны проживать в GAC?

Ответы [ 2 ]

11 голосов
/ 07 января 2011

Сборки приемника событий не могут быть установлены только в «bin», потому что таким образом .net Framework не может их найти.

Когда ваша сборка загружается из «корзины», это происходит потому, что загрузчик сборки использует зондирование для определения местоположения сборки. Сначала он ищет в GAC, затем ищет каталог с именем «bin» в текущем рабочем каталоге.

Следовательно, весь код, который вы используете для запуска веб-интерфейса - код для страниц ASPX, веб-сервисов и т. Д., Может быть помещен в inetpub .... / bin, поскольку там есть рабочий каталог вашего веб-приложения.

Однако рабочие процессы и запланированные «задания таймера» выполняются OWSTIMER.exe, который является службой Windows. Как типичная служба Windows, она имеет свой рабочий каталог где-то в c: \ windows.

Это означает, что если вы поместите вашу сборку где-нибудь в inetpub ... \ bin, она не будет найдена пользователем.

Следовательно, общие сборки, такие как обработчики событий, должны быть развернуты в GAC.

0 голосов
/ 07 января 2011

Развертывание SharePoint EventReceiver будет невозможно в корзине. это должно быть сделано только в GAC. Я не уверен, какова точная причина, но, возможно, это связано с безопасностью кода.

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