2011-11-24 26 views
3

我嘗試從事件接收器內的模塊添加到web.config中。我爲此使用SPWebConfigModification。當我更新webApp(webApp.Update())時,拋出以下錯誤:「在web.config文件中找不到指定的節點」 - 嘗試以編程方式添加模塊時出錯

在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

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文章中,我下面鏈接的並不一致。

的更多信息:

相關問題