2011-11-24 15 views
3

イベント受信側からweb.configにモジュールを追加しようとしています。私はSPWebConfigModificationを使っています。 WebApp(webApp.Update())を更新すると、次のエラーがスローされます。"web.configファイルに指定されたノードが見つかりませんでした" - プログラムでモジュールを追加しようとするとエラーが発生します

指定されたノード "configuration/system.webserver/modules"がweb.configファイルに見つかりませんでした。

しかし、そのノードは必ずweb configに存在します(また、かなり共通のノードです)。なぜこれが失敗するのか? web.config修飾のタイプがEnsureChildNodeであれば、Nameプロパティは、ノードの複製が追加されないことを保証するために、一意(Pathプロパティによって識別される)は、親ノードの下のノードを識別するXPath表現を含まなければならない

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

ファイルに追加します。

つまり、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の記事では一貫していないのです。

詳細情報:

関連する問題