2011-05-10 35 views
23

¿Alguien sabe, en un archivo .tt, donde code.VsNamespaceSuggestion() obtiene su espacio de nombres?T4 Generation: ¿De dónde extrae VsNamespaceSuggestion()?

Tengo un problema donde tuve que cambiar el espacio de nombres de una solución, y juro que lo cambié a todas partes (nombres de carpetas, nombres de archivos, proyectos, propiedades, información de ensamblaje, etc.). Pero cuando se ejecuta el archivo .tt, siempre vuelve a poner el antiguo espacio de nombres en sus clases generadas. Me dijeron 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 NotePad).

¿Alguna idea? Para un corte, simplemente estoy anulando en la siguiente línea con el espacio de nombres que quiero:

string namespaceName = code.VsNamespaceSuggestion(); 
namespaceName = "Desired.Namespace"; //HACK: 

Respuesta

1

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

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

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

AR también encontró instancias en mi archivo .suo. Dado que el problema parece ser fijo, no eliminé ese archivo (no se puede editar en NotePad, lamentablemente).

54

Acabo de tener este problema exacto, y la solución que descubrí no fue mencionada aquí, así que pensé que ayudaría a cualquiera que haya encontrado este artículo en una búsqueda.

Haga clic en el archivo de generación de código * .tt que está generando sus entidades. En el panel de propiedades, establezca el Espacio de nombres de 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 del espacio de nombres del proyecto predeterminado + jerarquía de carpetas.

+3

Gracias por la información! –

+8

+1 ¡Gran solución! Debería ser aceptada la respuesta – Seph

3

El host T4 en Visual Studio extrae esto de la bolsa de propiedades CallContext, usando el nombre "NamespaceHint". Ese valor se rellena con el mecanismo de herramienta personalizado T4 estándar (SingleFileGenerator) utilizando el espacio de nombre predeterminado especificado para la herramienta personalizada, que se deriva del espacio de nombre predeterminado del proyecto y la ruta del raíz del proyecto al archivo tt o explícitamente especificado en la grilla de propiedad debajo de la especificación de la herramienta personalizada (como dice @mattkab en su respuesta)

Si está usando el servicio T4 del código, puede llenarlo configurando CallContext usted mismo.

2

basta con modificar las propiedades de los archivos * .tt de la siguiente imagen, y efectiva de inmediato .:

Default is empty