Domanda

Sono utilizzando SubSonic 3 (modalità ActiveRecord) per generare il codice per il mio DAL. Esso utilizza modelli T4 (.tt) file che non appena si salva, generare il codice per voi.

Voglio automatizzare questo come parte del mio NANT costruire, ma non riesco a farlo funzionare. So che MS fornisce uno strumento chiamato textTransform per generare il codice da modelli T4, ma nel caso dei modelli SubSonic questo non sembra funzionare - penso che i modelli fanno alcune ipotesi circa il modello viene eseguito da all'interno di Visual Studio, che non sembra lavorare da linea di comando. L'errore che ottengo quando provo a lanciarlo contro ActiveRecord.tt è:

Subsonic \ ActiveRecord.tt (0,0): errore: System.InvalidCastException:: trasformazione Esecuzione Impossibile eseguire il cast oggetto di tipo 'Microsoft.VisualStudio.TextTemplating.CommandLine.CommandLineHost' digitare 'System.IServiceProvider'.    a Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetCurrentProject () in C: \ Users \ matt.roberts \ AppData \ Loc al \ Temp \ subsonico \ Settings.ttinclude: la linea 103    a Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetConnectionString (String connectionStringName) in c: \ U sers \ matt.roberts \ AppData \ Local \ Temp \ subsonico \ Settings.ttinclude: la linea 51    a Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.get_ConnectionString () in C: \ Users \ matt.roberts \ AppData \ Local \ Temp \ subsonico \ Settings.ttinclude: linea 87

Qualcuno è riuscito per automatizzare questa generazione?

Grazie

Matt.

È stato utile?

Soluzione

ho scritto un blog che si occupa di questo terreno un po ':

opzioni per l'esecuzione di modelli T4 da. NET codice

Per fare ciò che si sta cercando di fare richiederà alcuni interventi di chirurgia sui modelli T4 SubSonic. In particolare, si dovrà (in minima parte) sostituire tutti i riferimenti a EnvDTE.DTE con qualcosa che non richiede Visual Studio per essere in esecuzione. Questo può essere semplice come difficile codifica alcuni sentieri e / o le informazioni di configurazione nel tuo modelli T4, se si vuole solo "farlo funzionare".

E 'importante ricordare che i modelli T4 sono un po' involucro sottile intorno NET. Se è possibile farlo da NET, è possibile molto probabilmente farlo da T4, devi solo capire come lavorare entro il diverso insieme di vincoli che T4 fornisce. Diverso T4 "hosts" (come Visual Studio vs. TextTransform.exe) si comportano in modi diversi e solo perché un modello T4 funziona bene sotto un host non non significa che verrà eseguito bene in un altro host.

Altri suggerimenti

setting.ttinclude deve essere eseguito all'interno del progetto di Visual Studio, se si desidera eseguire da linea di comando si dovrà dare le impostazioni del file la stringa di connessione piuttosto che punta ad esso nei file di configurazione, si può anche avere per impostare un percorso di progetto.

si seee si chiama in questo modo:

string GetConnectionString(string connectionStringName){
    var _CurrentProject = GetCurrentProject();

    string result="";
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
    configFile.ExeConfigFilename = GetConfigPath();

questo è probabilmente dove il problema deriva, quindi, se si imposta questi a mano allora si oproblem potrebbero quindi essere risolti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top