12 May 2008

Видаляйте попередні зміни перед додаванням SPWebConfigModification

Site Collection Features Сьогодні зіткнувся з цікавою ситуацією. В мене є SPFeatureReceiver який модифікує web.config. Вийшло так що при деактивації feature цей receiver не видалив попередні зміни. Наступна активація додала ще елементів (це, до речі, мій наступний баг ;)). Зрозуміло що веб додаток такого пережити не зміг...

Рішення

Просто видаляти попередні зміни. Для цього потрібно встановлювати унікальне значення для SPWebConfigModification.Owner. Тоді видалення попередніх елементів буде швидким і безболісним:


private static void CleanUpModificationsByOwnerId(
    SPWebApplication application, string ownerIdentifier
)
{
    List<SPWebConfigModification> modificationsToRemove
        = application.WebConfigModifications.Where(
            candidateModification =>
            candidateModification.Owner.Equals(
                ownerIdentifier, StringComparison.OrdinalIgnoreCase
            )
        ).ToList();
    foreach (SPWebConfigModification modification in modificationsToRemove)               
    {
        application.WebConfigModifications.Remove(modification);
    }
}

Наразі, можу викласти реалізацію ресівера що читає вже існуючий .confg файл і робить потрібні модифікаці. Це значно полегшує підтримку конфігурацій, в порівнянні коли всі зміни робляться прямо в ресівері, адже розробник бачить не велику кількість кода, а звийчаний конфіг.

Помічено як: ,
 

Коментарі

Немає коментарів
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.