Pregunta

Estoy usando SubSonic 3 (modo ActiveRecord) para generar el código de mi DAL. Utiliza plantillas (T4) .tt archivos que tan pronto como guarde, generar el código para usted.

Quiero automatizar este como parte de mi NANT acumulación, pero no puedo conseguir que esto funcione. Yo sé que la EM proporcionan una herramienta llamada TextTransform para generar el código de las plantillas T4, pero en el caso de las plantillas SubSonic esto no parece funcionar - Creo que las plantillas hacen algunas suposiciones acerca de la plantilla que se ejecuta desde dentro de Visual Studio, lo que no parece que el trabajo de la línea de comandos. El error que consigo cuando intento ejecutarlo contra ActiveRecord.tt es:

subsónico \ ActiveRecord.tt (0,0): Error: la transformación en marcha: System.InvalidCastException: No se puede convertir objeto de tipo 'Microsoft.VisualStudio.TextTemplating.CommandLine.CommandLineHost' al tipo 'System.IServiceProvider'.    en Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetCurrentProject () en c: \ Users \ matt.roberts \ AppData \ Loc al \ Temp \ subsónico \ Settings.ttinclude: línea 103    en Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetConnectionString (String connectionStringName) en c: \ U Sers \ matt.roberts \ AppData \ \ Local Temp \ subsónica \ Settings.ttinclude: Línea 51    en Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.get_ConnectionString () en c: \ Users \ matt.roberts \ AppData \ Local \ Temp \ subsónica \ Settings.ttinclude: Línea 87

¿Alguien ha conseguido automatizar esta generación?

Gracias

Mat.

¿Fue útil?

Solución

Me escribió una entrada de blog que cubre esta tierra un tanto:

las opciones para ejecutar las plantillas T4 de. código NET

Para hacer lo que está tratando de hacer requerirá una cirugía en las plantillas SubSonic T4. En concreto, tendrá que (mínimamente) reemplazar todas las referencias a EnvDTE.DTE con algo que no requiere Visual Studio para estar en ejecución. Esto puede ser tan simple como difícil a programar algunos caminos y / o información de configuración en sus plantillas T4 si quieres simplemente "hacer que funcione".

Es importante recordar que las plantillas T4 son un envoltorio con un tanto delgada alrededor de código .NET. Si puede hacerlo desde .NET, puede muy probable hacerlo desde T4, sólo hay que entender la forma de trabajo dentro de los diferentes conjuntos de restricciones que ofrece T4. Diferentes T4 "hosts" (como Visual Studio vs TextTransform.exe) se comportan de manera diferente y sólo porque una plantilla T4 funciona muy bien bajo un anfitrión no quiere decir que no va a funcionar muy bien debajo de otro host.

Otros consejos

setting.ttinclude necesidades para ejecutar dentro del proyecto de Visual Studio, si desea ejecutar desde la línea de comandos que tendrá que dar la configuración del archivo de la cadena de conexión en lugar de señalar a ella en los archivos de configuración, es posible que tenga para establecer una ruta del proyecto.

seee que llamar a esto:

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

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

eso es probablemente donde el problema se deriva, por lo que si se establece éstos con la mano, entonces oproblem podrían entonces ser resueltos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top