2016-02-21 18 views
9

Wie ich derzeit im vollständigen .NET Framework verstehe, wenn wir das Framework auf dem Computer installieren, stellt es die gesamte BCL auf dem Computer GAC. Auf diese Weise werden bei der Entwicklung einer Software mit .NET und der Bereitstellung auf diesem Computer die BCL-Assemblys verwendet, die im GAC verfügbar gemacht werden, wenn das .NET Framework selbst installiert wurde.Gibt es eine GAC-Entsprechung für .NET Core?

Nun, wie ich weiß CoreFX ist das Äquivalent des BCL für den neuen .NET Core. Der Hauptunterschied ist jedoch, dass wir in der project.json genau angeben können, welche Teile des CoreFX wir brauchen.

Meine Frage ist: Wenn wir .NET Core-Anwendungen bereitstellen, gibt es in der Produktionsumgebung ein GAC-Äquivalent? Gibt es also bei der Bereitstellung der auszuführenden App einen zentralen Ort auf dem Computer, an dem die App nachsehen wird, ob der gesamte CoreFX verfügbar ist?

+0

AOT Compilation (Ahead-Of-Time) ist wahrscheinlich die dominante Art und Weise zu erstellen ausfahrbaren ausführbare Dateien, kein Rahmen überhaupt erforderlich ist. Ziemlich notwendig, um bei Kaltstarts nicht getötet zu werden. Sie arbeiten daran, CoreRT-Projekt. Diese Art von Fragen sind viel nützlicher, wenn Sie sie in einem Jahr fragen. –

+0

Ich sah, dass CoreRT für diese AOT-Kompilation verantwortlich sein würde, die am Ende nur eine native ausführbare Datei erzeugen würde. Aber es gibt auch das CoreCLR, das mit JIT Compilation funktioniert? In diesem Fall, wenn man es benutzt, gibt es sowas wie den GAC, wo die Assemblies von CoreFX gesucht werden? – user1620696

Antwort

3

Nein, es gibt nicht, nicht in der Art, wie Sie an die GAC denken. Core-Apps sollen voneinander isoliert sein, so dass Sie Patches erstellen können, ohne Angst davor zu haben, die anderen zu beeinflussen. Sie versenden alle Pakete, die Sie benötigen, mit der App.

Es gibt ein Wartungsverzeichnis, das zum Versenden von Updates für Core-Komponenten verwendet werden kann, es aber vollständig auslagern, nicht die Versionierung nebeneinander aktivieren und es nur für Updates verwenden soll, die über Microsoft Update geliefert werden.

+0

Danke @blowdart. Ich wusste, dass wir für .NET Core alle Pakete, die wir brauchen, mit der App liefern können, aber ich dachte, das wäre nur eine Option. Also müssen wir bei der Entwicklung von .NET Core-Apps die Pakete immer mit der App versenden? – user1620696

+0

Es gibt das Konzept eines lokalen Cache, oder zumindest gab es mit DNX, aber wenn Sie lokal versenden, überschreiben Sie es. Es ist mehr für "fehlende" Pakete. – blowdart

9

bearbeiten 2017-09-01

Etwas analog den GAC, .NET Core 2.0 führt die "Runtime package store":

Beginnend mit .NET Core 2.0, ist es möglich, zu verpacken und Apps gegen eine bekannte Gruppe von Paketen bereitstellen, die in der Zielumgebung vorhanden sind. Die Vorteile sind schnellere Bereitstellungen, geringerer Speicherplatzverbrauch und eine verbesserte Startleistung in einigen Fällen.

Diese Funktion ist als Laufzeitpaketspeicher implementiert. Dies ist ein Verzeichnis auf dem Datenträger, in dem Pakete gespeichert werden (normalerweise unter/usr/local/share/dotnet/store unter macOS/Linux und C:/Programme/dotnet/unter Windows speichern).


Sie suchen eine "Rahmenabhängigen Einsatz". Von the docs:

  • Rahmenabhängige Bereitstellung:

    Sie können zwei Arten von Implementierungen für .NET Core-Anwendungen erstellen. Wie der Name schon sagt, beruht Framework-Dependent Deployment (FDD) auf einer gemeinsamen systemweiten Version von .NET Core, die auf dem Zielsystem vorhanden sein soll. Da .NET Core bereits vorhanden ist, ist Ihre App auch zwischen Installationen von .NET Core portierbar. Ihre App enthält nur ihren eigenen Code und alle Abhängigkeiten von Drittanbietern, die sich außerhalb der .NET Core-Bibliotheken befinden. FDDs enthalten DLL-Dateien, die mit dem Dienstprogramm dotnet von der Befehlszeile aus gestartet werden können. Beispiel: dotnet app.dll führt eine Anwendung namens app.

  • Unabhängige Bereitstellung. Im Gegensatz zu FDD ist eine eigenständige Implementierung (SCD) nicht darauf angewiesen, dass gemeinsame Komponenten auf dem Zielsystem vorhanden sind. Alle Komponenten, einschließlich der .NET Core-Bibliotheken und der .NET Core-Laufzeitumgebung, sind in der Anwendung enthalten und von anderen .NET Core-Anwendungen isoliert.SCDs enthalten eine ausführbare Datei (z. B. app.exe auf Windows-Plattformen für eine Anwendung mit dem Namen app), die eine umbenannte Version des plattformspezifischen .NET Core-Hosts ist, und eine DLL-Datei (z. B. app.dll), die die eigentliche Anwendung darstellt.

Verwandte Themen