¿Cómo forzar a Visual Studio 2008 a regenerar el código de las plantillas T4 cuando cambia un archivo XML?

votos
5

Estoy generando bastante código de un solo archivo XML, pero las plantillas están organizadas en dos plantillas T4 diferentes. Cada vez que cambio el archivo XML, debo recordar abrir los dos *.ttarchivos, cambiarlos trivialmente (agregar / eliminar un espacio) y guardarlos nuevamente para asegurarme de que se genere el código.

¡Esta no puede ser la manera correcta de hacerlo!

Idealmente, me gustaría que Visual Studio 2008 realice una transformación de texto en los archivos T4 si el archivo XML ha cambiado. Estoy un poco perdido ya que realmente no sé cómo Visual Studio construye proyectos de C #, por lo que los punteros en esa dirección también serían de ayuda (podría intentar resolverlo yo mismo).

Publicado el 28/10/2009 a las 08:29
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

Puede usar T4ScriptFileGenerator de T4Toolbox como una herramienta personalizada para su archivo XML. Supongamos que tiene el archivo Test.XML en su proyecto con esta herramienta personalizada. La primera vez que se guarda Test.XML, esta herramienta personalizada crea un nuevo archivo Test.tt. Puede colocar su lógica de generación de código allí (en su lugar, o #include sus otros archivos .tt). La próxima vez que guarde Test.XML, se transformará (generará código) el Test.tt existente.

Respondida el 28/10/2009 a las 09:40
fuente por usuario

votos
2

Creo que finalmente podría haber encontrado una solución a este problema. Tuve la idea cuando se navega por la cantidad de archivos XAML se mencionan en el archivo de proyecto para proyectos de C #.

Supongamos un archivo A.tty B.ttque el uso de los datos C.xmly nos gustaría volver a generar el código cada vez que C.xmlcambia.

Editar el archivo de proyecto. Sus definiciones para A.tty B.ttdebe ser algo como esto:

<ItemGroup>
    <None Include="A.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>A.cs</LastGenOutput>
      <DependentUpon>C.xml</DependentUpon>
    </None>
    <None Include="B.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>B.cs</LastGenOutput>
      <DependentUpon>C.xml</DependentUpon>
    </None>
</ItemGroup>

Además, se necesita (por supuesto ...)

<ItemGroup>
    <None Include="C.xml" />
</ItemGroup>

Y también la instrucción para autogenerar A.csy B.cs:

<Compile Include="A.cs">
      <DependentUpon>A.tt</DependentUpon>
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
</Compile>
<Compile Include="B.cs">
      <DependentUpon>B.tt</DependentUpon>
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
</Compile>

Creo que la mayor parte de esto ya se hará para usted cuando se crea el archivo de plantilla, así que todo lo que realmente tiene que agregar es la <DependentUpon>C.xml</DependentUpon>partes a las ItemGroups de A.tte B.tt.

Respondida el 12/11/2010 a las 09:44
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more