2011-05-10 13 views
6

Estoy tratando de utilizar este esquema simple en mi proyecto:VS2010 T4 de auto pago y envío de archivos generados a partir de TFS no

Item.cs -> contiene esta clase parcial C# con propiedades de entidad simples. Ha establecido también la propiedad "Herramienta personalizada: T4ScriptFileGenerator" por lo que adjunta el archivo "agrupado" Item.tt a él. Que en su camino genera Item.generated.cs, agrupado en Item.tt. Por lo tanto, resulta en un árbol agrupados en explorador de soluciones:

Item.cs 
˪Item.tt 
˪Item.generated.cs 

Usted puede ver a continuación cómo se ve en .csproj.

Todo el proyecto está conectado al espacio de trabajo de TFS 2010.

El problema es:

Cuando editar Item.cs, motor T4 recrea Item.generated.cs archivo, pero no comprueba a cabo desde TFS. Comprueba automáticamente solo los primeros dos niveles de archivos "agrupados" - Item.cs y su dependiente Item.tt. Se actualizó Item.generated.cs, pero se sobrescribió de forma simple, sin pago.

Si edito archivo Item.tt o simplemente presione "Ejecutar herramienta personalizada" en él - de nuevo dos archivos están desprotegidos: Item.tt y sus dependientes Item.generated.cs Esto es raro porque las fuerzas para que "ejecutemos manualmente la herramienta personalizada" en cada archivo * .tt después de editar los archivos de la clase de entidad para garantizar que no falte nada en TFS.

Q: ¿Hay alguna forma para que la fuerza de revisar todo el árbol de DependentUpon archivos cuando se edita principal Item.cs?

Aquí es cómo se ve en .csproj fuente de archivo:

<Compile Include="Entities\Item.cs"> 
    <Generator>T4ScriptFileGenerator</Generator> 
    <LastGenOutput>Item.tt</LastGenOutput> 
</Compile> 
<None Include="Entities\Item.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <AutoGen>True</AutoGen> 
    <DesignTime>True</DesignTime> 
    <DependentUpon>Item.cs</DependentUpon> 
    <LastGenOutput>Item.codegen.cs</LastGenOutput> 
</None> 
<Compile Include="Entities\Item.codegen.cs"> 
    <AutoGen>True</AutoGen> 
    <DesignTime>True</DesignTime> 
    <DependentUpon>Item.tt</DependentUpon> 
</Compile> 
+0

No veo el problema con una pequeña reproducción de su solución en VS2010 SP1. No tengo 2010 sin SP1 a la mano, por lo que es posible que sea una corrección de sistema de proyecto en el paquete de servicio o una versión más nueva de T4Toolbox, pero está funcionando para mí. ¿Sigues viendo el problema? También vea mi solución como una respuesta simple a continuación. – GarethJ

Respuesta

0

No es muy elegante, pero siempre se puede conseguir VS para transformar todas las plantillas en la solución por golpear a los "transformar todos plantillas" botón en la parte superior del explorador de soluciones.

Consulte mi nota sobre la pregunta original, al menos en VS2010 SP1, esto parece funcionar, dado el fragmento de archivo de proyecto de ejemplo exacto.

0
/// <summary> 
/// (T4 template code to checkout a file path if necessary) 
/// </summary> 
/// <param name="fileName">The file name.</param> 
private void CheckoutFileIfRequired(String fileName) 
{ 
    var sc = this.dte.SourceControl; 
    if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName)) 
      checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null)); 
} 
Cuestiones relacionadas