How to programmatically modify assemblyBinding in app.config?

后端 未结 3 894
广开言路
广开言路 2020-12-19 01:33

I am trying to change the bindingRedirect element at install time by using the XmlDocument class and modifying the value directly. Here is what my app.config looks like:

相关标签:
3条回答
  • 2020-12-19 02:05

    Sounds like you've got your configuration file tweak working now, but I thought you might still be interested in how to adjust binding redirects at run time. The key is to use the AppDomain.AssemblyResolve event, and the details are in this answer. I prefer it over using the configuration file, because my version number comparison can be a bit more sophisticated and I don't have to tweak the configuration file during every build.

    0 讨论(0)
  • 2020-12-19 02:10

    I think the right Xpath syntax is:

    /configuration/runtime/assemblyBinding/dependentAssembly/bindingRedirect@newVersion

    (you have a slash too many).

    Or if this doesn't work you could select the bindingRedirect element (using SelectSingleNode):

    /configuration/runtime/assemblyBinding/dependentAssembly/bindingRedirect

    Then modify the attribute newVersion of this element.

    0 讨论(0)
  • 2020-12-19 02:12

    I found what I needed. The XmlNamespaceManager is required as the assemblyBinding node contains the xmlns attribute. I modified the code to use this and it works:

        private void SetRuntimeBinding(string path, string value)
        {
            XmlDocument doc = new XmlDocument();
    
            try
            {
                doc.Load(Path.Combine(path, "MyApp.exe.config"));
            }
            catch (FileNotFoundException)
            {
                return;
            }
    
            XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
            manager.AddNamespace("bindings", "urn:schemas-microsoft-com:asm.v1");
    
            XmlNode root = doc.DocumentElement;
    
            XmlNode node = root.SelectSingleNode("//bindings:bindingRedirect", manager);
    
            if (node == null)
            {
                throw (new Exception("Invalid Configuration File"));
            }
    
            node = node.SelectSingleNode("@newVersion");
    
            if (node == null)
            {
                throw (new Exception("Invalid Configuration File"));
            }
    
            node.Value = value;
    
            doc.Save(Path.Combine(path, "MyApp.exe.config"));
        }
    
    0 讨论(0)
提交回复
热议问题