Pregunta

Cuando construyo mi solución de C #, los archivos .tt no crearán las salidas del archivo .cs. Pero si hago clic derecho en los archivos .tt uno por uno en el explorador de soluciones y selecciono "Ejecutar herramienta personalizada" se genera .cs, por lo que la configuración de la herramienta de compilación es correcta. ¿Qué debo hacer para obtener la compilación de la solución general para forzar la ejecución de la herramienta personalizada en los archivos .tt?

¿Fue útil?

Solución

Paul, también puedes generar código en tiempo de compilación con TextTransform.exe o Elton Stoneman Tarea MSBuild . Solo tenga en cuenta que el comportamiento de las directivas integradas, como ensamblado y include es diferente cuando T4 se ejecuta en Visual Studio vs. host de línea de comandos.

Otros consejos

Respondiendo a mi propia pregunta, se supone que se deben generar en tiempo de diseño según esta discusión:

https://web.archive.org/web/20081227142303/http://www.olegsych.com/2008/02/t4-template-directive/

En Visual Studio 2013, pude obtener los archivos .tt para regenerar sus objetivos simplemente agregando estas líneas al archivo .csproj:

<PropertyGroup>
  <!-- Get the Visual Studio version – defaults to 10: -->
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!-- Keep the next element all on one line: -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<!-- To enable build tasks on your development computer, install Modeling SDK for Visual Studio. https://www.microsoft.com/en-us/download/details.aspx?id=40754 -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />
<!-- Run the Transform task at the start of every build -->
<PropertyGroup>
  <TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>
<!-- Overwrite files that are read-only, for example because they are not checked out -->
<PropertyGroup>
  <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
</PropertyGroup>
<!-- Transform every template every time -->
<PropertyGroup>
  <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>

Sin embargo, para que esto funcione, deberá haber instalado el Modelado SDK para Visual Studio . Encontré toda esta información, junto con una descripción más completa de las opciones disponibles, en esta página: Generación de código en un proceso de compilación .

En Visual Studio 2017 (probablemente también en las próximas versiones), debe agregar esto en el evento Pre-build:

"$(DevEnvDir)TextTransform.exe" -out "$(ProjectDir)YourTemplate.cs" "$(ProjectDir)YourTemplate.tt"

p.s. La única solución que funcionó para mí.

p.s.s. Cambie la ruta a su plantilla si no se encuentra en el directorio raíz del proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top