Estoy dividiendo el código T4 en archivos separados para modularidad y reutilización, pero estoy descubriendo que cada archivo me cuesta una línea vacía en la salida. Por ejemplo:Plantillas T4: evite las líneas vacías de los archivos incluidos
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".ttinclude" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Include file="Includes.tt" #>
namespace <#= NameSpace #>
{
Si Includes.tt enumera otros 3 archivos * .tt, obtengo 3 líneas en blanco antes del espacio de nombres. Como estoy agregando código y dividiéndolo en archivos * .tt separados, este espacio vacío sigue creciendo. De hecho, empaqué todos los archivos incluidos en un solo Includes.tt, con la esperanza de que esto me cueste solo una línea vacía. No fue así. Todavía tengo una línea vacía por cada archivo enumerado en Includes.tt. ¿Hay alguna forma de evitar esto?
Editar: suponiendo que no estoy haciendo sólo un error tonto (y espero sinceramente que soy), el problema no es tan trivial como puede aparecer en la primera vista:
a) Reutilización y modularidad a través de los archivos T4 incluidos es tan antiguo como T4 y se mencionó en el último artículo de MSDN Magazine: "Gestión de la complejidad en soluciones de generación de códigos T4".
b) Si el código se genera automáticamente, no significa que está bien que esté mal formateado o que sea poco legible.
c) Con la solución actual, en mi caso, para cada y cada archivo .cs generado, el lector debería desplazarse por una página vacía hasta que empiece a ver el texto generado. Todo porque he dividido la generación de mi código entre múltiples archivos .tt incluidos. Eso simplemente no parece correcto.
Hola Tony: esto es un poco un legado de nuestras primeras versiones. Ahora estamos un poco reacios a 'arreglarlo', ya que eso rompería la compatibilidad con versiones anteriores para las personas que han usado la solución alternativa.Hemos jugado con la idea de una bandera de opt-in, algo así como 'smarterParsing = true', pero "no estoy demasiado interesado a tener que probar dos codepaths análisis sintáctico en este punto – GarethJ
El mismo truco funciona incluso con una sola Incluir. - sólo asegúrese de que no hay caracteres entre etiqueta de cierre de la inclusión y la siguiente instrucción (ya sea literal o
ViktorZ
la verdadera razón es que cada plantilla generada (que es el código CS) tiene un \ r \ n en 'pública TransformText virtual de cadena() { this.Write ("\ r \ n"); ', por lo que su respuesta se acaba funcionando porque se omite la nueva línea añadida pulsando retorno después de cada plantilla incluida – Sebastian