2012-10-09 10 views
5

Estoy intentando generar código en cada compilación de mi proyecto utilizando VS2012.Generando T4 en compilación utilizando VS 2012

tengo 3 proyectos en mi solución:

  • proyecto 1 tiene algunas clases
  • proyecto 2 tiene la plantilla genérica
  • proyecto 3 tiene la plantilla que lee un archivo JSON y luego llamar a la genérica plantilla del proyecto 2 para generar su archivo.

Cuando hago clic en Crear/Transformar todas las plantillas T4, no hay ningún problema, la generación va bien.

Pero estoy tratando de configurar mi compilación para incluir este paso automáticamente en cada compilación.

He añadido este código a mi csproj:

<Import Project="$MsBuildToolsPath)\Microsoft.CSharp.Targets" /> 
<PropertyGroup> 
    <TransformOnBuild>true</TransformOnBuild> 
    <OverWriteReadOnlyOutputFiles>true</OverWriteReadOnlyOutputFiles> 
</PropertyGroup> 
<Import Project="$(MSBuildExtensionPath32)\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets"/> 

he hecho yo mismo el camino "\ Microsoft \ VisualStudio \ v11.0 \ TextTemplating \ Microsoft.TextTemplating.targets" de lo que yo encontrado en mi pc. El ejemplo la aparté de era: get-visual-studio-to-run-a-t4-template-on-every-build

El problema proviene de esta línea que estoy utilizando: < # @ include file = "$ (SolutionDir) \ xxx \ yyy \ zzz \ mytemplate.tt">

y recibo el error:

no lograron resolver incluir texto para el archivo: D: \ Proyectos \ pppp \ qqq \ eeee \ $ (SolutionDir) \ xxx \ yyy \ zzz \ mytemplate.tt

Como la plantilla funciona bien cuando se genera "a mano" (Build/Transform All T4 Templates), me pregunto cuál podría ser el problema para generarla en el momento de la compilación.

¿Alguna idea?

Respuesta

2

El problema es que cuando ejecuta su plantilla durante el proceso de compilación se está ejecutando en otro host y la macro $ (SolutionDir) no existe. Intente utilizar la ruta relativa en lugar de, por ejemplo,

<#@ include file="..\xxx\yyy\zzz\mytemplate.tt"> 
+0

Eso podría funcionar con incluir pero ¿qué ocurre con el montaje? Usé $ (SolutionDir) para localizarlos, tengo el mismo tipo de error si pruebo la ruta relativa. El nombre de ensamblado dado o base de código no es válido. Gracias por tu ayuda – Arthis

+0

Finalmente utilicé la ruta absoluta porque todo lo demás funcionaba correctamente y necesitaba seguir adelante. – Arthis

+0

No estoy seguro de cuál fue el problema con la ruta relativa, pero puedes probar el método 'Host.ResolvePath' –

Cuestiones relacionadas