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:
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.
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).
Ich habe auch versucht, die Aufgabe EntityDeploy
build so zu betrachten, wie sie auf der Festplatte existiert.
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.
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:
.edmx
gelesen Dateien und bestimmt, ob die Ergebnisse aus der Verarbeitung jeweils in die Zielbaugruppe eingebettet oder nebeneinander platziert werden sollen. NonEmbeddingItems
von 1 aufgerufen. , es teilt die .edmx
Dateien auf und speichert das Ergebnis in OutputPath
EmbeddingItems
von 1 aufgerufen. , es teilt die .edmx
Dateien auf und speichert das Ergebnis in EntityDeployIntermediateResourcePath
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) Ich habe das nicht versucht, aber es sollte möglich sein, diese nacheinander aufzurufen, um das erwartete Verhalten mit Motorklasse :
%Vor%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.
Tags und Links .net c# entity-framework msbuild