2009-04-29 13 views
1

Ich habe erfolgreich Interop zwischen Win32-Anwendung und verwaltet. NET-DLL wie beschrieben here implementiert. Aber ich lese auch here, dass es möglich ist, die gesamte CLR innerhalb des nicht verwalteten Prozesses zu hosten.Hosting CLR im Vergleich zu ClrCreateManagedInstance - was sind die Vorteile?

Also meine Frage ist: Warum würdest du das tun? Es ist etwas komplexer als nur ein Objekt zu verwenden - welchen Nutzen haben Sie für diesen Preis erhöhter Komplexität?

Bearbeiten: Was ich aus 2 ersten Antworten verstanden habe, ist, dass Sie die CLR für Ihre Bedürfnisse anpassen können - das heißt, wenn Sie eine einfache Business-App schreiben, müssen Sie nie hosten. Hosting ist für System-schwere Sachen, wie Browser oder SQL Server.

Antwort

3

Hosting der CLR ist in der Regel nicht etwas, was Sie tun, um zwischen verwaltetem Code und Win32 zu interopieren. Regel 3 Methoden der interop gibt es:

  • Runtime aufrufbare Wrapper (RCW) - Aufruf ein COM-Objekt von .NET
  • COM aufrufbare Wrapper (CCW) - erscheint ein .NET-Objekt machen als COM-Objekt
  • P/Invoke

Diese werden seit der ersten Version von .NET unterstützt. Der ganze Sinn des Hostens der CLR besteht darin, dass Sie .NET-Code tief in eine nicht verwaltete Anwendung einbetten können. Zum Beispiel gibt es ein Modul, das .NET in Apache auf Win32 hosten kann, so dass es ASPX-Seiten ausführen kann.

In ähnlicher Weise wollte der SQL Server eine Möglichkeit für Menschen, erweiterte gespeicherte Prozeduren und Funktionen mit verwaltetem Code zu schreiben. In der Vergangenheit konnten Sie diese in C/C++ schreiben, aber wenn sie die CLR gehostet hatten, konnten sie tatsächlich Leuten erlauben, diese mit C# zu schreiben. Die Arbeit, die CLR in einen Zustand zu bringen, in dem sie sicher eingebettet sein könnte, hat die Zeitlinien wirklich verdrängt, und so wurden Dinge wie Kontrolle über Speicher und Sicherheit geboren. SQL Server hat einige ernsthafte Stabilitätsanforderungen und Sie können nicht .NET das Boot rocken lassen.

Der Hosting-API deutlich von .NET 1.x auf 2.x geändert hat aber stabiler gewesen, da die 2.0 CLR über .NET 3.0, 3.5 usw. gelebt haben

2

Sie eine Legacy-Anwendung haben und aus Ihrer Anwendung die Ausstattung von .net dritten Parteien der Verwendung erlauben wollen aber vor allem in einer kontrollierten Art und Weise wie gesteuert werden, wo Baugruppen aus geladen werden. Here ist ein Beispiel.

+1

Gute Verbindung, danke. Meine Frage war eher, warum Sie mehr Kontrolle brauchen. –

2

Microsoft SQL Server verwendet es umfassend, um die Sicherheit, Laden von Baugruppen, Speicherverwaltung, Thread-Management und was nicht zu ersetzen. Ein gutes Buch zu diesem Thema ist "Anpassen der Microsoft .NET Framework Common Language Runtime".

Verwandte Themen