2016-10-18 5 views
7

Ich baue eine REST-API auf ASP.NET CORE 1.0. In der Produktion wäre es IMHO sehr nützlich, JIT NICHT zu verwenden, da die Docker-Container mit der App skaliert werden und immer wieder während CI neu verteilt werden, so dass die Just-in-Time-Kompilierung für jeden implementierten Container schreckliche Verzögerungen, LB, verursacht Gesundheitscheck Todesfälle und andere Schmerzen.Kompilieren von .net Core App mit CoreRT/einem anderen AOT

Wie ich gelesen habe, wird die native Kompilierung mit dotnet CLI eingestellt. Ich habe versucht mit CoreRT bauen, aber ohne Glück (Details auf Anfrage wegen der Komplexität).

Da diese Frage ist ganz abstrakt Ich Bereitstellung nicht Beispielcodes oder detaillierten Infos, so für den Start gibt es nur wenige Fragen statt:

  1. Ist meine Vermutung richtig - wird Voraus-Kompilierung lösen das Problem mit der langsamen ersten Ausführung jedes Pfades - oder gibt es keine andere Lösung?
  2. Wenn es wahr ist, ist es derzeit möglich, "native" App (Ubuntu x64 Ziel) von .NET Core zu erstellen?
  3. Wenn es ist, was ist die beste Praxis - wie kann ich es tun? Hat jemand Erfahrung damit?

(Die Zielplattform würde ubuntu-14.04-x64 Docker Bild sowie die Zusammenstellung Plattform sein. Für wären Zwecke entwickeln auch schön es auf OSX zu kompilieren.)

Vielen Dank im Voraus.

+0

Wenn das zu diesem Zeitpunkt machbar ist, frage ich mich, warum Microsoft es noch nicht bekannt gibt. Also mein Verständnis ist, dass die Zeit nicht stimmt und du dich nicht mit so einem großen Thema beschäftigen solltest. –

+0

Sind Sie sicher? Das CoreRT-Projekt klingt ziemlich vielversprechend [https://github.com/dotnet/corert/blob/master/Documentation/how-to-build-and-run-ilcompiler-in-console-shell-prompt.md] – rudolfdobias

+0

jeder weiß Es ist vielversprechend und Microsoft hat es sogar letztes Jahr bei Connect vorgeführt. Aber bevor es die Produktionsqualität erreicht, lassen Sie es in Ruhe. –

Antwort

5

Es ist zur Zeit nicht möglich, eine vollständige vorläufige Kompilierung durchzuführen. Es ist eines der Ziele des oben verlinkten CoreRT-Projekts, aber in keinem Zustand, den ich als produktionsbereit bezeichnen würde. Die Demo bei Connect letztes Jahr sollte mit einer ziemlich großen Portion Salz eingenommen werden. Zum Beispiel haben sie immer noch keine reflection subsystem. Wir haben jedoch eine Reihe von Lösungen, die die Menge an Code, die zur JIT-Zeit generiert werden muss, stark reduzieren können. Für .NET Core heißt das Tool CrossGen und es ist in diesen Tagen ziemlich gebacken.

Während ich Ihre Aufmerksamkeit habe, werde ich auch erwähnen, dass wir an einer Weiterentwicklung des NGEN/CrossGen-Formats arbeiten, das einen großen Teil der typischen Schmerzen bei typischen ni-Dateien beseitigt. Das geht unter dann Name ReadyToRun

Hoffe, dass hilft. Lass es mich wissen, wenn du andere Fragen hast.

Disclosure: Ich arbeite auf dem .NET-Runtime-india und Compiler-Team für UWP (ein Schwesterprojekt zu CoreRT und LLILC etc)

+0

Danke für Ihre Aufmerksamkeit, ich sehe mir diese definitiv an. - Zurück zur Frage oben - die Startzeiten für fast jeden Pfad sind 10-20s. Und es ist noch ein kleines Projekt. – rudolfdobias

+0

Also habe ich versucht, CrossGen zu verwenden. Irgendwo in der zehnten Ordnerebene des Paketpaket-Cache gefunden. Aber jetzt merke ich, dass ich nicht weiß, wie man es benutzt, da es dafür fast keine Dokumentation gibt. Wenn ich es auf Projekt laufen lasse, sagt es mir, dass 'System.Private.CoreLib.dll' fehlt. Könnten Sie mir bitte einige grundlegende Anweisungen geben? Ich kann eine neue Frage eröffnen. – rudolfdobias

+1

Um dich davon abzuhalten, dich in die Irre zu führen, habe ich die Entwickler kontaktiert, die crossgen besitzen. Hoffentlich kann einer von uns uns aussortieren. –

3

Es ist ein Leitfaden bei https://github.com/dotnet/coreclr/blob/master/Documentation/building/crossgen.md für die Verwendung von Crossgen. Es ist ein wenig veraltet - ich werde sehen, ob ich es irgendwann aktualisieren kann. Der wichtigste Teil der Verwendung von CrossGen besteht darin, den Schalter -Platform_Assemblies_Paths in der Befehlszeile anzugeben, um CrossGen den Speicherort aller erforderlichen Abhängigkeiten mitzuteilen (z. B. System.Private.CoreLib.dll).

Hoffe, dass hilft. Bitte lassen Sie mich wissen, wenn Sie weitere Probleme haben.

Verwandte Themen