Итак, я пытаюсь развернуть функцию веб-приложения, которая обновляет файл web.config с использованием коллекции WebConfigModifications. Есть много информации об этом, включая все проблемы, с которыми вы столкнулись, поэтому я очень уверен в коде, но, что бы я ни пытался, элементы конфигурации не добавляются в веб-конфигурацию. Это прекрасно работает в среде с одним сервером разработки, но не обновляется в ферме.
Нет ошибок, нет данных журнала, нет сообщений о событиях .... ничего не указывает на то, почему он не будет обновляться:
SPWebConfigModification appSettingModification = new SPWebConfigModification ();
appSettingModification.Name = "add [@key = \" Key \ "] [@ value = \" Value \ "]";
appSettingModification.Path = "configuration / appSettings";
appSettingModification.Owner = "Владелец";
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
appSettingModification.Value = __appSettingResource;
if (removeModification)
{
app.WebConfigModification.Remove (appSettingModification);
}
еще
{
app.WebConfigModification.Add (appSettingModification);
}
app.Update ();
app.Farm.Services.GetValue () ApplyWebConfigModifications ().
==============================
EDIT
Я хотел бы добавить к этому, основываясь на предложении drax, чтобы отразить метод ApplyWebModification. Этот метод используется в SPWebService, который находится в пространстве имен Microsoft.SharePoint.Administration в сборке Microsoft.SharePoint.
Одна из проблем, связанных с использованием этого метода, заключается в том, что все файлы web.config обновляются в ферме, даже если на самом деле не применяются никакие изменения. Это приводит к перезапуску пулов приложений, даже если вы не собираетесь обновлять веб-конфигурацию. Отражение показывает, почему это происходит, и это очень раздражает.
Внутри метода есть короткий цикл foreach:
foreach (приложение SPWebApplication в этом. WebApplications)
{
application.ApplyWebConfigModifications ();
}
Он проходит по каждому веб-приложению и вызывает ВНУТРЕННИЙ Метод ApplyWebConfigModification для объектов веб-приложения. Если бы они просто сделали этот метод общедоступным, мы бы могли вызывать этот метод по отдельности, не затрагивая перезапуск пула приложений в веб-приложениях, на которые не влияют наши обновления. Просто скажи