“在web.config文件中找不到指定的节点” - 尝试以编程方式添加模块时出错

时间:2011-11-24 16:32:29

标签: sharepoint sharepoint-2010 web-config

我尝试在事件接收器中将模块添加到web.config中。我为此使用了SPWebConfigModification。当我更新webApp(webApp.Update())时,抛出以下错误:

在web.config文件中找不到指定的节点“configuration / system.webserver / modules”。

但是该节点肯定存在于Web配置中(并且也是一个非常常见的节点)。知道为什么会失败吗?

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 :(得分:0)

web.config修改的类型为EnsureChildNode时,Name属性应包含一个XPath表达式,该表达式唯一标识父节点下的节点(由Path标识property)确保没有将节点的重复项添加到文件中。

换句话说,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文章中也不一致。

更多信息: