2009-05-01 4 views
0

Ich habe mehrere Dienste, die eine Baugruppe aus dem GAC zieht. Wenn ich einen dieser Dienste installiere, aktualisiert es den GAC mit einer neuen Assembly, die von verschiedenen Diensten gemeinsam genutzt wird, und fügt eine neue Richtliniendatei in den GAC ein, so dass alle vorherigen Versionen nach der neuen Assembly suchen. Alle Dienste greifen auf die Richtlinie zu, ohne den Dienst neu zu starten, und verwenden die neue Assembly perfekt. Das Problem und die Frage treten auf, wenn ich diese Version zurücksetzen und die Assembly und die Richtlinie deinstalliere und den Dienst zur Installation der neuen Assembly neu starte. Offensichtlich nimmt der neu gestartete Dienst die vorherige Version der Assembly im GAC auf. Aber die anderen Dienste, die auf dem Server ausgeführt werden, der diese Assembly verwendet, werden weiterhin aus der Richtliniendatei an die neue Version der Assembly gebunden. Meine Fragen sind:Gibt CLR jemals die Bindung einer Baugruppe aus GAC frei

Ist die Bindung wie ein Cache, in dem es es schließlich freigibt und auf der alten Versammlung zurückgreift? oder bleibt es gebunden, bis der Dienst neu gestartet wird?

Wenn ein Neustart erforderlich ist, gibt es neben der Suche nach allen Diensten, die diese Assembly verwenden und diese Dienste neu starten, oder den Server selbst neu zu starten, um die Verblindung der Assembly zu entfernen, die aus dem GAC entfernt wurde.

Antwort

1

Die .NET-Laufzeitumgebung lädt eine Assembly erst, wenn die Anwendungsdomäne heruntergefahren wird (normalerweise wenn der Prozess beendet wird, aber mehrere Anwendungsdomänen in einem einzigen Prozess erstellt werden können).

Ich denke, Sie müssen die anderen Dienste herunterfahren, entfernen Sie die Richtliniendatei und die neue Assembly, und starten Sie alle beteiligten Dienste neu.