我尝试在事件接收器中将模块添加到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();
});
答案 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文章中也不一致。
更多信息: