Не удалось загрузить сборку приемника, отсутствует перезапуск службы?
-
10-12-2019 - |
Вопрос
Я активирую функцию с помощью PowerShell, и каждый раз «время от времени» она выходит из строя с ошибкой «Не удалось загрузить сборку приемника».Кажется, он жалуется, потому что какая-то служба или приложение не может найти dll в GAC, однако я каждый раз проверял, и dll всегда правильно развертывается в GAC.Мой сценарий PowerShell работает следующим образом:
- Удалите все соответствующие WSPS (удаление из GAC).
- Перезапуск:SPAdminV4, SPTimerV4, SPUserCodeV4 и IISReset
- Установите все соответствующие WSPS, включая тот, который должен быть целью приемника событий.
- Перезапуск:SPAdminV4, SPTimerV4, SPUserCodeV4 и IISReset
- Активируйте функцию (в области веб-приложения)
Я пытался приостановить выполнение сценария между шагами 3 и 4 и между шагами 4 и 5, чтобы убедиться, что DLL присутствует и всегда есть.Я проверил правильность функции xml ReceiverAssembly, но не думаю, что это проблема, поскольку в большинстве случаев она работает.
Я могу успешно запустить сценарий несколько раз, и внезапно он терпит неудачу.Есть ли какая-то служба, которую мне нужно перезапустить в дополнение к iisreset?
Редактировать Дополнительные сведения:
- Существует 10 wps, один из которых содержит функцию области веб-приложения.
- Я не жду какое-то время после сброса, так как думал, что перезагрузка завершится после возврата iisreset.
- Ошибка возникает, когда SharePoint пытается вызвать пользовательский приемник событий FeatureActivated в одном из файлов wsps.
- Частичная трассировка стека (сокращенно):Системное исключение:Не удалось загрузить сборку приемника [полная подпись сборки приемника] или одну из ее зависимостей.Система не может найти указанный файл.System.IO.FileNotFoundException:Не удалось загрузить файл или сборку [полная подпись сборки получателя]
редактировать:Добавлены шаги по переработке сервиса.
(Я не могу опубликовать точный код, поскольку система находится в сети с ограниченным доступом)
Решение 2
Я решил проблему.Кажется, мне не нужно сбрасывать IIS или SPAdminV4 во время развертывания.Удаление всех ссылок на это из моего сценария PowerShell решило проблему.
Я также должен отметить, что ожидание 5 секунд после сброса SPAdminV4 перед активацией этой функции также позволило избежать ошибки.
Другие советы
Часто это происходит из-за того, что SPTimerV4 содержит кэшированную ссылку на ваше решение .dll:s.
попробуй сделать
net stop SPTimerV4
net start SPTimerV4
в PowerShell или cmd, если вы отозвали свой .wsp перед его переустановкой.