2009-08-18 15 views
15

Tengo un proyecto VS que contiene: 1. Una acción previa a la compilación de ejecutar TextTransform en una "template.tt" para generar "generated.cs" 2. "generated. cs "enumerado como uno de los archivos para compilar (es decir, en la lista de archivos de proyectoTransformación T4 y orden de compilación en Visual Studio

Cuando construyo el proyecto, la acción previa a la compilación se realiza, se vuelve a generar" generated.cs "pero VS compila el anterior versión de la misma (que supongo que se cargó en la memoria al inicio del proceso de compilación).

¿Qué se puede hacer para que la compilación use el archivo cs recién generado (que se genera en la acción preconstruida?

(nótese que en mi situación la entrada de la transformación de texto es dinámica, por tanto, no se puede hacer en tiempo de diseño)

Gracias.

Respuesta

4

No creo que necesite una acción de preconstrucción personalizada. Simplemente agregue el archivo ".tt" a su proyecto y establezca su propiedad "Herramienta personalizada" a "TextTemplatingFileGenerator". Es posible que desee asegurarse de que los archivos * .generated.cs también se agreguen al proyecto, pero creo que VS se ocupa de eso.

+6

Esto no parece funcionar para mí. Creo que Zvika estaba diciendo que querían que la plantilla T4 funcionara de maravilla cada vez que se construye su proyecto. Esto es lo que quiero también. Aunque, estoy usando T4MVC con ASP.NET MVC 3. Por ejemplo, si tomo un proyecto que compila, agrego un nuevo archivo que debería ser recogido por T4MVC, luego construyo el proyecto de nuevo, no veo el cambio que debería haber sido hecho por T4MVC. Tengo que activar explícitamente una actualización haciendo clic con el botón derecho en el archivo .tt y eligiendo Ejecutar herramienta personalizada. –

+0

esto solo generará el resultado cuando guarde el archivo '.tt'. –

3

¡Ahora hay una solución a este problema! Oleg Sych tiene una publicación en su blog que detalla cómo hacer trabajo de transformación en tiempo de construcción.

Aquí está la fuente: https://web.archive.org/web/20140116193428/http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration/

Básicamente, sólo se incluyen los tipos de generación T4 del archivo de proyecto y establezca la propiedad TransformOnBuild true.

Este es el pasaje relevante:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <PropertyGroup> 
    <TransformOnBuild>true</TransformOnBuild> 
    </PropertyGroup> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 

Tenga en cuenta que los Microsoft.TextTemplating.targets archivo tiene que ser incluido DESPUÉS los Microsoft.CSharp.targets.

+0

Esto genera los archivos pero omite su espacio de nombres relativo. ¿Cómo puedo superar esto? –

Cuestiones relacionadas