Rufen Sie die EntityDeploy-Build-Task programmatisch auf

9

Ich verwende Roslyn zum Kompilieren, Emittieren und Ausführen von C # Quellcode. Ich stolperte jedoch bei Projekten, die EntityFramework verwenden, auf eine Einschränkung.

Es scheint, dass das einfache Ausgeben der Kompilierung nicht ausreicht, da es eine EntityDeploy Build-Aufgabe gibt, die die DLLs manipuliert, nachdem sie ausgegeben wurden. (Ich glaube, dass Metadaten-Artefakte in die DLLs eingebettet werden, nachdem sie ausgegeben wurden).

In der Datei .csproj , die ich gerade verarbeite, sehe ich die folgende Entity-Task:

%Vor%

Ist es möglich, diese Build-Aufgabe direkt aufzurufen und die von mir ausgegebenen DLLs zu manipulieren?

Hinweis: Ich möchte nicht einfach msbuild.exe aufrufen oder MSBuild für alles in der .csproj -Datei ausführen. Die Projekte, die ich erstelle, existieren im Speicher, aber nicht auf der Festplatte, so dass das in meinem Fall nicht funktioniert.

Was ich versucht habe:

Ich versuche zu lernen, wie man das Microsoft.Build.Evaluation Zeug benutzt. Ich kann die EntityDeploy-Aufgabe finden, aber ich weiß nicht, wie ich sie aufrufen kann (und welche Parameter ich bereitstellen soll).

%Vor%

Ich habe auch versucht, die Aufgabe EntityDeploy build so zu betrachten, wie sie auf der Festplatte existiert.

%Vor%

Ich bin gleichzeitig brandneu in MSBuild , EntityFramework und EntityDeploy , also korrigiert mich bitte, wenn ich Begriffe missbraucht habe oder auf die falsche Art und Weise hierher gekommen bin.

    
JoshVarty 27.11.2015, 08:10
quelle

2 Antworten

4

Ich bin nicht mit EntityDeploy vertraut, aber ich gebe einige Informationen, die ich gesammelt habe, die Ihnen vielleicht helfen könnten.

Wenn Sie sich die Ziele ansehen Datei kann man sehen, dass es ein EntityDeploy Ziel gibt, das sich auf EntityDeploy , EntityDeploySplit , EntityDeploySetLogicalNames und EntityClean Aufgaben / p>

Wenn das EntityDeploy Ziel mit der Liste von .edmx Dateien aufgerufen wird, passiert folgendes:

  1. EntityDeploySplit wird aufgerufen, es wird .edmx gelesen Dateien und bestimmt, ob die Ergebnisse aus der Verarbeitung jeweils in die Zielbaugruppe eingebettet oder nebeneinander platziert werden sollen.
  2. EntityDeploy wird am NonEmbeddingItems von 1 aufgerufen. , es teilt die .edmx Dateien auf und speichert das Ergebnis in OutputPath
  3. EntityDeploy wird am EmbeddingItems von 1 aufgerufen. , es teilt die .edmx Dateien auf und speichert das Ergebnis in EntityDeployIntermediateResourcePath
  4. EntityDeploySetLogicalNames wird für die Dateien in EntityDeployIntermediateResourcePath aufgerufen Setzen Sie die Metadaten LogicalName für jede Datei auf den logischen Namen, der für die Einbettung verwendet werden soll (Es ist nur der relative Pfad zur Datei von EntityDeployIntermediateResourcePath mit Schrägstrichen, die durch Punkte ersetzt werden)
  5. EntityClean wird aufgerufen, um die Zwischendateien zu entfernen

Ich habe das nicht versucht, aber es sollte möglich sein, diese nacheinander aufzurufen, um das erwartete Verhalten mit Motorklasse :

%Vor%     
Andriy Svyryd 07.12.2015 22:34
quelle
0

Versuchen Sie Folgendes:

%Vor%

Der Ausgabepfad scheint nicht aufgenommen zu werden, aber wenn er leer ist, wird ein Fehler protokolliert. Sie können dies sehen, wenn Sie Ihre eigene IBuildEngine implementieren und die Fehler protokollieren. Das Ergebnis des Prozesses sind drei Dateien neben dem edmx: "Model1.ssdl", "Model1.csdl", "Model1.msdl". Diese Dateien müssen als eingebettete Ressourcen an CSC übergeben werden, zumindest ist dies das Original Datei scheint zu tun.

Hoffe, es hilft, und zumindest fängt es an.

    
Tamas 02.12.2015 07:23
quelle

Tags und Links