Keine Anwendungsdomänen in .NET Core! Warum?
Gibt es einen guten Grund, warum entschied sich Microsoft nicht zu unterstützen, AppDomains .NET Core?
AppDomains sind besonders nützlich beim erstellen von lange Laufenden server-apps, wo wir möglicherweise aktualisieren möchten, müssen Sie die Baugruppen geladen vom server ist eine anmutige Art und Weise, ohne den server Herunterfahren.
Ohne Anwendungsdomänen, wie werden wir ersetzen unsere Versammlungen in einem lange Laufenden server-Prozesses?
AppDomains geben uns auch einen Weg zu isolieren verschiedenen teilen der server-code. Wie eine benutzerdefinierte websocket-server-socket-code in der primären Anwendungsdomäne, während unsere services laufen in sekundäre appdomain.
Ohne AppDomains, das obige Szenario ist nicht möglich.
Kann ich sehen, eine Argumentation, die kann sprechen über die Verwendung von VMs Konzept des Cloud für handling, Montage änderungen und nicht mit Aufwand für die AppDomains. Aber ist es das, was Microsoft denkt oder sagt? oder Sie haben einen bestimmten Grund und alternativen für die oben genannten Szenarien?
InformationsquelleAutor der Frage Aditya Pasumarthi | 2014-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Punkt der .NETCore Teilmenge war, zu halten .NET installieren kleine. Und einfach Anschluss. Das ist, warum Sie sagen, führen Sie eine Silverlight-app auf Windows-und OSX und nicht sehr lange warten, wenn Sie besuchen Sie die web-Seite. Herunterladen und installieren die komplette runtime und framework nimmt eine Handvoll von Sekunden, geben oder nehmen.
Sie klein zu halten erfordert zwangsläufig features geschnitten werden. Remoting war sehr hoch auf dieser Liste, es ist ziemlich teuer. Ansonsten gut versteckt, aber Sie können zum Beispiel sehen, dass die Delegierten nicht mehr, haben Sie eine funktionale BeginInvoke () - Methode. Die AppDomain auf der cut-Liste als gut, Sie können nicht führen Sie den code in eine app-Domäne ohne remoting unterstützen. Das ist also völlig beabsichtigt.
InformationsquelleAutor der Antwort Hans Passant
Update für .NET-Standard 2 und .NET Core 2
In .NET-Standard 2 der
AppDomain
Klasse ist. Jedoch, viele Teile, dass die API werfen wirdPlatformNotSupportedException
.NET Core.Der wichtigste Grund ist es, noch ist es für grundlegende Dinge wie die Registrierung eine nicht behandelte exception-handler, die wird Arbeit.
Die .NET-Standard-FAQ hat diese Erklärung:
Abgesehen davon, dass die top Antwort und andere Antworten auch sehr schön erklären, warum der Großteil der AppDomain war noch Ausschneiden (z.B. wirft einen nicht unterstützten Ausnahme).
InformationsquelleAutor der Antwort Jeroen
Irgendwann habe ich gehört, dass beim entladen Assemblys würde aktiviert werden, ohne Verwendung von Domänen. Ich denke, dass die
System.Runtime.Loader.AssemblyLoadContext
geben System.Runtime.Loader.dll ist in diesem Zusammenhang, aber ich sehe nichts es ermöglicht, dass die Entladung noch.InformationsquelleAutor der Antwort bricelam
Ich habe gehört, in einer Gemeinschaft standup oder einige sprechen von Microsoft, dass Sie die isolation-Funktion von AppDomains sind besser gehandhabt werden, indem Prozesse (und eigentlich auch die gängigen Muster, die in anderen Plattformen) und die Entladung ist in der Tat geplant, wie eine normale Funktion unabhängig von Anwendungsdomänen.
InformationsquelleAutor der Antwort Thomas
App-Domänen
Warum wurde es eingestellt? AppDomains erfordern runtime-Unterstützung und sind in der Regel Recht teuer. Während noch umgesetzt CoreCLR, ist es nicht verfügbar .NET Native und wir planen nicht, auf hinzufügen diese Funktion gibt.
Was sollte ich stattdessen verwenden? AppDomains wurden für verschiedene Zwecke verwendet. Für die code-Trennung, wir empfehlen, die Prozesse und/oder Container. Für das dynamische laden von Assemblys, empfehlen wir die neue AssemblyLoadContext Klasse.
Quelle Von MSDN-Blog
InformationsquelleAutor der Antwort cwishva