Estoy intentando cambiar el elemento bindingRedirect en el momento de la instalación utilizando la clase XmlDocument y modificando el valor directamente. Esto es lo que se ve mi app.config como:Cómo modificar programáticamente assemblyBinding en app.config?
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
...
</sectionGroup>
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyDll" publicKeyToken="31bfe856bd364e35"/>
<bindingRedirect oldVersion="0.7" newVersion="1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
...
</configuration>
Entonces trato de utilizar el código siguiente para cambiar 1.0 a 2,0
private void SetRuntimeBinding(string path, string value)
{
XmlDocument xml = new XmlDocument();
xml.Load(Path.Combine(path, "MyApp.exe.config"));
XmlNode root = xml.DocumentElement;
if (root == null)
{
return;
}
XmlNode node = root.SelectSingleNode("/configuration/runtime/assemblyBinding/dependentAssembly/bindingRedirect/@newVersion");
if (node == null)
{
throw (new Exception("not found"));
}
node.Value = value;
xml.Save(Path.Combine(path, "MyApp.exe.config"));
}
Sin embargo, se produce la excepción 'no encontrado'. Si respaldo la ruta hasta/configuration/runtime, funciona. Sin embargo, una vez que agregue assemblyBinding, no encuentra el nodo. Posiblemente esto tiene algo que ver con los xmlns? ¿Alguna idea de cómo puedo modificar esto? ConfigurationManager tampoco tiene acceso a esta sección.
Solo una nota, tiro excepciones ya que esto es parte de un Proyecto de Configuración y así es como el instalador es notificado de cualquier error. Sería mejor que el método devuelva verdadero o falso si se realizó la modificación. – esac