Автоматически развертывать файлы ресурсов в папке App_GlobalResources центра администрирования при развертывании решения в веб-приложении.

Я разрабатываю решение SharePoint 2010, которое состоит из некоторых веб-частей и других компонентов. Кроме того, решение нуждается в страницах приложений в центральном администрировании для настройки.

Поэтому мое решение содержит дополнительную функцию, которая помещает настраиваемые действия в меню центрального администрирования, которое ссылается на страницу приложения, предоставляющую конфигурацию. Функция имеет область действия WebApplication и использует атрибут AutoActivateInCentralAdmin со значением True, поэтому функция автоматически активируется в центре администрирования при развертывании решения в веб-приложении. Эта часть моего решения работает, как и ожидалось.

Но у меня есть некоторые проблемы с файлами ресурсов, которые используются страницами приложений в центре администрирования, поскольку они развертываются только в папке App_GlobalResources веб-приложения, в котором было развернуто решение, но не в папке App_GlobalResources центра администрирования.

Так что мне интересно, зачем использовать AutoActivateInCentralAdmin, когда нет автоматического развертывания файлов ресурсов в папку App_GlobalResources центра администрирования.

Каков наилучший способ развертывания файлов ресурсов в папке центрального администрирования App_GlobalResources всякий раз, когда решение развертывается в любом веб-приложении в ферме? Есть ли автоматический путь к этому?


person Flo    schedule 26.10.2010    source источник


Ответы (2)


Здесь мы говорим о ресурсах приложений (в отличие от ресурсов подготовки), и они должны быть развернуты в папке {SharePointRoot}\CONFIG\Resources. Убедитесь, что файлы ресурсов, используемые страницами вашего приложения, развернуты в этой папке при развертывании вашего WSP.

При создании нового веб-приложения ресурсы изначально копируются в папку App_GlobalResources, здесь все в порядке.

Но когда веб-приложение уже создано (как в вашем случае), вам нужно скопировать ресурсы в существующие веб-приложения. Вы можете сделать это вручную с помощью этой команды

stsadm –o copyappbincontent

Или вы можете автоматизировать (что вы и хотите) это, включив следующее в ваше событие FeatureActivated в вашем приемнике функций. Чтобы получить ресурсы центра администрирования и карты сайта, позвоните по телефону

SPWebService.AdministrationService.ApplyApplicationContentToLocalServer();

Для обычных ресурсов страницы приложения и карты сайта,

SPFarm.Local.Services.GetValue().ApplyApplicationContentToLocalServer();

person Ashish Patel    schedule 26.10.2010
comment
Поправьте меня, если я ошибаюсь, но и stsadm -o copyappbincontent, и ApplyApplicationContentToLocalServer() копируют только файлы ресурсов на локальном сервере. Таким образом, на ферме вам придется выполнять команду (одну или другую на каждом интерфейсном веб-сервере. Это решение для меня не вариант. - person Flo; 26.10.2010
comment
Не обращайте внимания на мой первый комментарий, я нажала добавить комментарий до того, как закончила его. ==> Поправьте меня, если я ошибаюсь, но и stsadm -o copyappbincontent, и ApplyApplicationContentToLocalServer() копируют только файлы ресурсов на локальном сервере. Так что на ферме вы столкнетесь с двумя проблемами. С помощью stsadm вам придется выполнять команду на каждом внешнем сервере. С помощью метода ApplyApplicationContentToLocalServer() в приемнике функций ресурс будет скопирован только на сервер, на котором функция была активирована, но не на всех внешних серверах. Так что оба варианта мне не подходят. - person Flo; 26.10.2010
comment
Я вижу ваши опасения. Есть люди, которые сталкивались с подобной проблемой, и я знаю, что в мире MOSS они столкнулись с пользовательским заданием таймера, которое срабатывает во время активации функции. Возможно, вы столкнулись с этим в ходе вашего расследования, но все же... : sharepointinterface.com/2009/06/06/ - person Ashish Patel; 26.10.2010
comment
Хорошо, тогда попробую этот вариант. Спасибо. - person Flo; 27.10.2010

Для этого необходимо создать задание пользовательского таймера. Если поискать в интернете, некоторые люди уже разработали такую ​​работу.

person Community    schedule 27.10.2010