«Указанный узел не найден в файле web.config» - ошибка при попытке добавить модуль программным способом - PullRequest
3 голосов
/ 24 ноября 2011

Я пытаюсь добавить модуль в web.config из приемника событий.Я использую SPWebConfigModification для этого.При обновлении webApp (webApp.Update ()) выдается следующая ошибка:

Указанный узел "configuration / system.webserver / modules" не найден в файле web.config.

Но этот узел наверняка существует в веб-конфигурации (и также является довольно распространенным узлом).Есть идеи, почему это не удается?

SPSite currentSite = GetCurrentSite(properties);
currentSite.AllowUnsafeUpdates = true;
SPWebApplication webApp = currentSite.WebApplication;

SPWebConfigModification modification = new SPWebConfigModification();
modification.Path = @"configuration/system.webServer/modules";
modification.Name = "ErrorRedirectModule";
modification.Sequence = 0;
modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
modification.Value = "<add name=\"ErrorRedirectModule2\" type=\"Tools.ErrorHttpModule, Tools, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6e907fc34eb70f91\" />  ";

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    webApp.WebConfigModifications.Add(modification);
    webApp.Update();
    webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
});

1 Ответ

0 голосов
/ 25 ноября 2011

Когда тип модификации web.config равен EnsureChildNode, свойство Name должно содержать выражение XPath, которое однозначно идентифицирует узел под родительским узлом (идентифицируемый свойством Path), чтобы гарантировать, что дубликаты узел не добавляется в файл.

Другими словами, Path + Name должно соответствовать выражению XPath с созданным узлом.

modification.Path = "configuration/system.webServer/modules";
modification.Name = "add[@name='ErrorRedirectModule2']";
modification.Sequence = 0;
modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
modification.Value = "<add name='ErrorRedirectModule2' type='Tools.ErrorHttpModule, Tools, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6e907fc34eb70f91' />";

Я не уверен насчет цитат ' против " - это непоследовательно даже в статьях MSDN, которые я привел ниже.

Дополнительная информация:

...