我正在尝试在运行时向我的Web.config文件添加新的dependentAssembly。到目前为止,我目前的代码已经
了 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 :(得分:2)
问题是因为您添加的新节点位于“no namespace”,而父节点位于“urn:schemas-microsoft-com:asm.v1”命名空间中。
<强>解决方案强>:
更改强>:
string Node = "<dependentAssembly>" +
以强>:
string Node = "<dependentAssembly xmlns='urn:schemas-microsoft-com:asm.v1'>" +
答案 1 :(得分:1)
我不确定为什么它不起作用可能是XML序列化程序。名称空间是正确的,因为XmlNode assemblyBinding对象不为null,我指定的代码就是我正在做的事情,仅此而已。可能是因为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 ;
}
感谢您的帮助。