Ich versuche, das bindingRedirect-Element zur Installationszeit zu ändern, indem ich die XmlDocument-Klasse verwende und den Wert direkt ändere. Hier ist, was meine app.config wie folgt aussieht:Wie programmierst du assemblyBinding in 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>
ich dann versuchen, den folgenden Code zu 1.0 verwenden zu 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"));
}
jedoch zu ändern, ist es die ‚nicht gefunden‘ Ausnahme auslöst. Wenn ich den Pfad bis zu/configuration/runtime zurücksetze, funktioniert es. Sobald ich jedoch assemblyBinding hinzufüge, wird der Knoten nicht gefunden. Möglicherweise hat das etwas mit den xmlns zu tun? Irgendeine Idee, wie ich das ändern kann? ConfigurationManager hat auch keinen Zugriff auf diesen Abschnitt.
Nur eine Anmerkung, ich werfe Ausnahmen aus, da dies Teil eines Setup-Projekts ist und der Installer über Fehler benachrichtigt wird. Es wäre besser, wenn die Methode wahr oder falsch zurückgibt, wenn die Änderung vorgenommen wurde. – esac