首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式将dependentAssembly添加到运行时\assemblyBinding

以编程方式将dependentAssembly添加到运行时\assemblyBinding
EN

Stack Overflow用户
提问于 2010-12-23 02:14:14
回答 2查看 2.3K关注 0票数 4

我试图在运行时向我的Web.config文件添加一个新的dependentAssembly。到目前为止,我的当前代码已经

代码语言:javascript
复制
    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 ;  
}

这是可行的,但是结果节点是这样的

代码语言:javascript
复制
<dependentAssembly xmlns="">
    <assemblyIdentity name="newone" publicKeyToken="608967" />
    <bindingRedirect oldVersion="1" newVersion="2" />
 </dependentAssembly>

我不需要追加xmlns=""属性。

有没有更好的方法来做这件事?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-24 00:56:04

我不确定为什么它不能工作可能是XML序列化程序。名称空间是正确的,因为XmlNode assemblyBinding对象不是空的,并且我指定的代码就是我正在做的事情,仅此而已。这可能是因为GetElement方法,它从一个字符串创建XmlNode并返回一个新的文档元素。

代码语言:javascript
复制
private static XmlElement GetElement(string xml)
        {
            //convert string to xml element
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            return doc.DocumentElement;
        }

无论如何,我已经使用XPathNavigator实现了这个结果。我的最终版本。

代码语言:javascript
复制
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 ;  
}

谢谢你的帮助。

票数 1
EN

Stack Overflow用户

发布于 2010-12-23 03:14:47

问题是因为您要添加的新节点位于"no namespace“中,而父节点位于"urn:schemas-microsoft-com:asm.v1”名称空间中。

解决方案

更改

代码语言:javascript
复制
  string Node = "<dependentAssembly>" + 

代码语言:javascript
复制
  string Node = "<dependentAssembly xmlns='urn:schemas-microsoft-com:asm.v1'>" + 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4512259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档