Wie kann ich die T4-Code-Generierung für SubSonic automatisieren
-
22-09-2019 - |
Frage
Ich bin mit SubSonic 3 (Active Modus), um den Code für meine DAL zu erzeugen. Es nutzt T4-Vorlagen (.tt) Dateien, sobald Sie den Code für Sie speichern, erzeugen.
Das möchte ich meinen NANT bauen als Teil automatisieren, aber ich kann das nicht an der Arbeit. Ich weiß, dass MS ein Werkzeug zur Verfügung stellt genannt texttrans den Code aus T4-Vorlagen zu erzeugen, aber im Fall der SubSonic Vorlagen dies scheint nicht zu arbeiten - ich glaube, die Vorlagen einige Annahmen über die Vorlage zu seinem Lauf machen in Visual Studio, das scheint nicht von der Kommandozeile zu arbeiten. Die Störung, die ich erhalte, wenn ich versuche, es gegen ActiveRecord.tt laufen soll:
Subsonic \ ActiveRecord.tt (0,0): Fehler: Lauf Transformation: System.InvalidCastException: Kann nicht Gussobjekt des Typs 'Microsoft.VisualStudio.TextTemplating.CommandLine.CommandLineHost' 'System.IServiceProvider' eingeben. bei Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. (GeneratedTextTransformation.GetCurrentProject) in C: \ Users \ matt.roberts \ AppData \ Loc al \ Temp \ subsonischen \ Settings.ttinclude: Linie 103 bei Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetConnectionString (String connection) in C: \ U sers \ matt.roberts \ AppData \ Local \ Temp \ Unterschall \ Settings.ttinclude: Linie 51 bei Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.get_ConnectionString in c (): \ Users \ matt.roberts \ AppData \ Local \ Temp \ Unterschall \ Settings.ttinclude: Zeile 87
Hat jemand es geschafft, diese Generation zu automatisieren?
Danke
Matt.
Lösung
Ich schrieb einen Blog-Eintrag, dass Abdeckungen dieser Grund etwas:
Optionen für die Ausführung von T4-Vorlagen aus. NET-Code
Zu tun, was Sie versuchen, eine Operation auf den SubSonic T4-Vorlagen zu tun erfordert. Genauer gesagt, haben Sie (minimal), um alle Verweise auf EnvDTE.DTE mit etwas zu ersetzen, das nicht Visual Studio erfordert zu laufen. Das so einfach wie hart sein, einige Pfade Codierung und / oder Konfigurationsinformationen in der T4-Vorlagen, wenn Sie wollen einfach nur „get it arbeiten“.
Es ist wichtig, sich daran zu erinnern, dass T4-Vorlagen sind eine etwas dünne Wrapper um Code .NET. Wenn Sie es von .NET tun können, können Sie sehr wahrscheinlich es von T4 tun, müssen Sie nur verstehen, wie man die Arbeit im anderen Satz von Einschränkungen, die T4 liefert. Verschiedene T4 „hosts“ (wie Visual Studio vs. TextTransform.exe) verhalten sich auf unterschiedliche Weise und nur weil ein T4-Vorlage läuft gut unter einem Host bedeutet nicht, es nicht in Ordnung unter einem anderen Host ausgeführt wird.
Andere Tipps
setting.ttinclude werden muss, um innerhalb des Projekts von Visual Studio ausführen, wenn Sie von der Kommandozeile ausführen wollen, müssen Sie die Einstellungen, um die Verbindung geben String-Datei und nicht in den Konfigurationsdateien auf sie zeigen, dass Sie auch haben einen Projektpfad zu setzen.
Sie seee es dem Aufruf dieser:
string GetConnectionString(string connectionStringName){
var _CurrentProject = GetCurrentProject();
string result="";
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = GetConfigPath();
das ist wahrscheinlich, wo das Problem ergibt sich, wenn Sie also diese von Hand einstellen dann Sie oproblem dann gelöst werden könnte