2009-12-29 7 views
5

Ich habe eine lange laufende C# -Server-Anwendung unter Linux/Mono ausgeführt, und ich habe die Möglichkeit hinzugefügt, DLL-Assemblys im laufenden Betrieb zu laden, um die Anwendung zu erweitern. Ich habe entdeckt, dass das Aktualisieren dieser DLL-Assemblies zur Laufzeit nicht ohne die Verwendung von AppDomains erfolgen kann, was nach dem Aussehen von dem, was ich bereits getan habe, in die Quere kommen wird. Sicher, es wird Workarounds geben, aber das ist nicht das, was ich wirklich will.Versuchen, AppDomains zu vermeiden

Bietet Mono irgendwelche alternativen Lösungen, die ich vielleicht übersehen habe? Hat C# 4.0 in diesem Bereich etwas Neues?

Antwort

0

Ich habe die Mono.CSharp-Bibliothek verwendet. Sie können C# -Code im laufenden Betrieb kompilieren und Hooks in Ihre Hauptanwendung einfügen, um sie auszuführen.

1

Anstatt in eine neue Assembly zu laden, um das Verhalten zu ändern, haben Sie in Betracht gezogen, die Anwendung in einzelne Komponenten aufzuteilen und zwischen diesen über einen Webservice oder TCP/IP zu kommunizieren? Auf diese Weise können Sie das Verhalten der Anwendung (zur Laufzeit) ändern, indem Sie den Aufruf der Komponenten ändern. Sie können z. B. eine neue Komponente mit dem neuen Verhalten "webservice" erstellen und dann alle vorhandenen Komponenten anweisen, sie zu verwenden.

Es wird auch einige Speicherprobleme mit lang laufenden Anwendungen mit der Mono-Laufzeit lösen.

+0

Alle Nachrichten, die Installation und Overheads, die das bringt, ist, was ich versuche zu vermeiden. Ich hatte keine Probleme mit meiner App, die lange mit Mono läuft. – FlappySocks