Gibt es eine Möglichkeit, EF Core RC2-Tools von veröffentlichter DLL auszuführen?

8

Nach dem Veröffentlichen einer .Net Core RC1-Anwendung enthielten in project.json angegebene Befehle entsprechende .cmd-Dateien, die nach der Bereitstellung erstellt wurden (z. B. web.cmd und ef.cmd). In meinem Fall möchte ich den folgenden Entity Framework-Befehl für mein Implementierungsziel ausführen:

%Vor%

Dies funktioniert einwandfrei, wenn ich dies aus dem Ordner heraus starte, der den Quellcode enthält, aber nach der Veröffentlichung scheint es den Befehl in den kompilierten DLLs nicht zu finden. Mein Verständnis der Befehlsänderung mit RC2 ist, dass 'Tools' als eigenständige Anwendungen namens dotnet - * .dll kompiliert werden können und über die CLI ausgeführt werden können. Wie können die Entity Framework Core-Tools als ausführbare DLLs in der veröffentlichten Ausgabe verfügbar gemacht werden?

Zu Ihrer Information: Mein Build / Deployment-Workflow ist wie folgt:

TeamCity

dotnet restore = & gt; dotnet build = & gt; Dotnettest = & gt; dotnet veröffentlichen

Octopus Deploy

Paket hochladen = & gt; EF Update-Datenbank = & gt; usw.

    
TallMcPaul 01.06.2016, 07:28
quelle

2 Antworten

3

Ich habe das gleiche Problem in einem Projekt gefunden, aber aus verschiedenen Gründen möchte ich nicht, dass Migrationen automatisch beim Anwendungsstart ausgeführt werden.

Um es zu lösen, habe ich Program.cs auf zwei Argumente aktualisiert (vollständiger Code ist unten aufgeführt)

  • --ef-migrate , um alle ausstehenden Migrationen anzuwenden, und
  • --ef-migrate-check , um zu überprüfen, ob alle Migrationen angewendet wurden

Wenn Argumente vorhanden sind, werden die EF-Aktionen angewendet und das Programm wird beendet, andernfalls wird die Webanwendung gestartet.

Bitte beachten Sie, dass dies vom Paket Microsoft.Extensions.CommandLineUtils abhängt, um die Analyse der Befehlszeile zu vereinfachen.

Für Octopus deploy kann das Paket dann zweimal an verschiedenen Orten veröffentlicht werden - einer für laufende Migrationen und der andere für Webhosting. In unserem Fall haben wir ein "Post-Deployment-Powershell-Skript" mit dem Inhalt hinzugefügt

%Vor%

In einem Andock-Kontext würde es auch perfekt funktionieren

%Vor%

Full Program.cs ohne Namespace und Verwendung:

%Vor%     
nover 25.04.2017, 06:25
quelle
0

Es gibt einen sehr nützlichen Post mit einer Lösung für dieses Problem hier .

Es funktionierte für mich (ich musste die Befehle ein wenig anpassen, aber es gab mir eine gute Grundlage, um zu beginnen).

Zusammengefasst: Sie können den dotnet ef database update -Befehl replizieren, indem Sie ef.dll übergeben (zB direkt aus Ihrem nuget-Ordner (oder von woanders, wenn Sie kein nugget haben, da Sie sich auf einer Produktionsmaschine befinden ..) ) mit Ihrer .dll, die die Migrationen mit einigen zusätzlichen Parametern (siehe unten) zu dotnet.exe (oder der Linux-Entsprechung) enthält.

Zur Vollständigkeit hier ist die .cmd (auch aus dem Blogpost!)

%Vor%

(Eine Bash-Version, wenn sich dieser cmd im Blogpost befindet)

Übrigens. Dieser Ansatz wurde auch in vielen GitHub-Ausgaben erwähnt: Ссылка Ссылка

ps: Ich habe das im Blog von Ben Day gefunden, also geht alles gut an Ben!

    
gregkalapos 04.07.2017 08:19
quelle