Generación T4: ¿De dónde saca VsNamespaceSuggestion ()?


¿Alguien sabe, en un archivo .tt, dónde está el código?VsNamespaceSuggestion () obtiene su espacio de nombres de?

Tengo un problema en el que tuve que cambiar el espacio de nombres de una solución, y juro que lo he cambiado en todas partes (nombres de carpetas, nombres de archivos, nombres de proyectos, propiedades del proyecto, información del ensamblaje, etc.). Pero cuando el .tt archivo se ejecuta, siempre pone el antiguo espacio de nombres de vuelta en sus clases generadas. Me dicen que proviene del modelo EF, pero no veo nada allí que muestre un espacio de nombres (ya sea en el diseñador/propiedades o abriendo el .archivo edmx en el bloc de notas).

¿Algún pensamiento? Para un hackeo, simplemente lo anulo en la siguiente línea con el espacio de nombres que quiero:

string namespaceName = code.VsNamespaceSuggestion();
namespaceName = "Desired.Namespace"; //HACK:
Author: sra, 2011-05-10

4 answers

Solo tenía este problema exacto, y la solución que descubrí no se mencionó aquí, así que pensé en ayudar a cualquiera que se cruzara con este artículo en una búsqueda.

Haga clic en el archivo *.tt de generación de código que está generando sus entidades. En el panel propiedades, establezca el Espacio de nombres de la herramienta personalizada en el espacio de nombres que desea generar. El mío estaba en blanco, por lo que T4 estaba generando el espacio de nombres desde el espacio de nombres predeterminado del proyecto + carpeta heirarchy.

 56
Author: mattkab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-24 17:43:10

El host T4 de Visual Studio extrae esto de la bolsa de propiedades CallContext, usando el nombre "NamespaceHint".

Ese valor se rellena con el mecanismo estándar T4 custom tool (SingleFileGenerator) utilizando el espacio de nombres predeterminado especificado para la herramienta personalizada, que se deriva del espacio de nombres predeterminado del proyecto y la ruta desde la raíz del proyecto al archivo tt o se especifica explícitamente en la cuadrícula de propiedades debajo de la especificación de herramienta personalizada (como dice @mattkab en su respuesta)

Si está utilizando el servicio T4 desde el código, puede rellenar esto configurando CallContext usted mismo.

 3
Author: GarethJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-24 22:29:36

Simplemente modifique las propiedades de los archivos *.tt como la siguiente imagen, y con efecto inmediato.:

El valor predeterminado está vacío

 2
Author: tomexou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-25 11:04:51

Creo que he solucionado el problema. Volví a comprobar los espacios de nombres predeterminados de todos los proyectos después del comentario de sra solo para asegurarme, pero todo era correcto.

"Buscar todo en archivos" no apareció nada. Usé una pequeña herramienta gratuita llamada Agente Ransack, y encontró una.archivo csproj con una etiqueta llamada , que tenía el antiguo espacio de nombres. Cambié eso, y eso es lo que lo arregló.

AR también encontró el antiguo espacio de nombres en un montón de archivos bin / Debug (abosluteFileList y archivos de caché). Eliminé todos esos archivos para que se regeneraran con el nuevo espacio de nombres. No tengo ni idea de si eso tuvo algún efecto.

AR también encontró instancias en mi .archivo suo. Dado que el problema parece estar solucionado, no eliminé ese archivo (desafortunadamente, no se puede editar en el bloc de notas).

 1
Author: James in Indy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-13 16:25:03