2010-12-22 120 views
4

我試圖在運行時向我的Web.config文件添加一個新的dependentAssembly。到目前爲止,我當前的代碼有以編程方式將dependentAssembly添加到運行時 assemblyBinding

XmlNamespaceManager manager = new XmlNamespaceManager (WebConfigDoc.NameTable); 
    manager.AddNamespace("bindings", "urn:schemas-microsoft-com:asm.v1"); 

    XmlNode root = WebConfigDoc.DocumentElement; 

    XmlNode assemblyBinding = root.SelectSingleNode("//bindings:assemblyBinding", manager);   

    XmlNode newAssemblyBinding = WebConfigDoc.ImportNode(GetElement(MyNewNode()), true); 

    assemblyBinding.AppendChild(newAssemblyBinding);  
} 

private string MyNewNode() 
{  
    string Node = "<dependentAssembly>" + 
        "<assemblyIdentity name=\"newone\" "+ 
        " publicKeyToken=\"608967\" />" + 
        "<bindingRedirect oldVersion=\"1\" newwVersion=\"2\" />" + 
        "</dependentAssembly>"; 
    return Node ; 
} 

這工作,但結果節點是這個

<dependentAssembly xmlns=""> 
    <assemblyIdentity name="newone" publicKeyToken="608967" /> 
    <bindingRedirect oldVersion="1" newVersion="2" /> 
</dependentAssembly> 

我不需要的xmlns=""屬性附加。

有沒有更好的方法來做到這一點?

謝謝。

+0

好問題,+1。請參閱我的答案以獲得解釋和完整而簡單的解決方案。 – 2010-12-22 19:15:25

+0

你問*有沒有更好的方法來做到這一點?*除了@Dimitre正確的答案,我認爲XSLT更適合這項任務。 – 2010-12-22 20:30:43

回答

1

我不知道爲什麼它不工作可能是XML序列化。名稱空間是正確的,因爲XmlNode assemblyBinding對象不是空的,我指定的代碼就是我正在做的事情,僅此而已。這可能是由於GetElement方法從一個字符串創建XmlNode並返回一個新的文檔元素。

private static XmlElement GetElement(string xml) 
     { 
      //convert string to xml element 
      XmlDocument doc = new XmlDocument(); 
      doc.LoadXml(xml); 
      return doc.DocumentElement; 
     } 

我反正用XPathNavigator實現了結果。我的最終版本。

XmlNamespaceManager manager = new XmlNamespaceManager (WebConfigDoc.NameTable); 
     manager.AddNamespace("bindings", "urn:schemas-microsoft-com:asm.v1"); 

     XmlNode root = WebConfigDoc.DocumentElement; 


XPathNavigator assemblyBinding = root.CreateNavigator(). 
               SelectSingleNode("//bindings:assemblyBinding", manager); 

       assemblyBinding.AppendChild(MyNewNode()); 

private string MyNewNode() 
{ 

    string Node = "<dependentAssembly>" + 
             "<assemblyIdentity name=\"newone\" "+ 
             " publicKeyToken=\"608967\" />" + 
             "<bindingRedirect oldVersion=\"1\" newwVersion=\"2\" />" + 
            "</dependentAssembly>"; 
      return Node ; 
} 

感謝您的幫助。

2

問題是因爲當父節點位於「urn:schemas-microsoft-com:asm.v1」命名空間中時,您添加的新節點位於「no namespace」中。

解決方案

更改

string Node = "<dependentAssembly>" + 

string Node = "<dependentAssembly xmlns='urn:schemas-microsoft-com:asm.v1'>" + 
相關問題