Wie programmierst du assemblyBinding in app.config?

8

Ich versuche, das bindingRedirect-Element zur Installationszeit zu ändern, indem ich die XmlDocument-Klasse verwende und den Wert direkt ändere. So sieht meine app.config aus:

%Vor%

Ich versuche dann den folgenden Code zu verwenden, um 1.0 zu 2.0

zu ändern %Vor%

Es wird jedoch die Ausnahme "nicht gefunden" ausgelö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.

    
esac 30.04.2009, 21:45
quelle

3 Antworten

8

Ich habe gefunden, was ich brauchte. Der XmlNamespaceManager wird benötigt, da der assemblyBinding-Knoten das xmlns-Attribut enthält. Ich habe den Code geändert, um dies zu verwenden und es funktioniert:

%Vor%     
esac 01.05.2009, 00:04
quelle
8

Klingt so, als hätte Ihre Konfigurationsdatei jetzt funktioniert, aber ich dachte, Sie könnten sich noch dafür interessieren, wie Sie verbindliche Weiterleitungen zur Laufzeit anpassen können. Der Schlüssel ist, das Ereignis AppDomain.AssemblyResolve zu verwenden, und die Details sind in diese Antwort . Ich bevorzuge es gegenüber der Verwendung der Konfigurationsdatei, da mein Vergleich der Versionsnummer ein bisschen ausgeklügelter sein kann und ich die Konfigurationsdatei nicht bei jedem Build optimieren muss.

    
Don Kirkby 26.02.2010 20:40
quelle
-1

Ich denke, die richtige Xpath-Syntax ist:

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

(Sie haben einen Schrägstrich zu viele).

Oder wenn das nicht funktioniert, können Sie das bindingRedirect-Element (mit SelectSingleNode) auswählen:

/ configuration / runtime / assemblyBinding / dependentAssembly / bindingRedirect

Ändern Sie dann das Attribut newVersion dieses Elements.

    
Joe 30.04.2009 22:30
quelle