2013-12-12 18 views
16

Attualmente sto lavorando con i modelli T4 e ho notato che a volte il codice non è rientrato correttamente, come posso evitarlo?Rientro sbagliato con i modelli T4

Per esempio ho questo codice nel modello

} 
    <# } #> 
    this.cmbDecisionList.Dat = dataSource; 
    this.btnDec.Enabled = dataSource.Count > 0; 
} 

e nella classe generata è come se

} 
       this.cmbDecisionList.Dat = dataSource; 
     this.btnDec.Enabled = dataSource.Count > 0; 
} 
+0

Io di solito evitato facendo il mio modello T4 più brutto e la rimozione di spazi bianchi in questo, quindi il mio codice generato sembrava più carina. :) –

+0

Sì, ma è complicato da capire ... –

+1

Il codice di solito generato non è destinato a essere letto, ma so che il tuo desiderio di avere un codice bello, anche se viene generato automaticamente. Oltre a cambiare il tuo modello T4 puoi anche utilizzare l'opzione "Formatta documento" nel menu "Modifica"> "Avanzate" del tuo file di output. E per quanto ne so, l'editor T4 di tangible ha un'opzione "Formato output" durante la generazione del codice. – Nico

risposta

31

Consentitemi di illustrare il problema sostituendo gli spazi con punti.

} 
....<# } #> 
....this.cmbDecisionList.Dat = dataSource; 
    this.btnDec.Enabled = dataSource.Count > 0; 
} 

e nella classe generata è come

} 
........this.cmbDecisionList.Dat = dataSource; 
    this.btnDec.Enabled = dataSource.Count > 0; 
} 

Ora, proviamo a rimuovere i punti precedenti.

} 
<# } #> 
....this.cmbDecisionList.Dat = dataSource; 
    this.btnDec.Enabled = dataSource.Count > 0; 
} 

e nella classe generata è come

} 
....this.cmbDecisionList.Dat = dataSource; 
    this.btnDec.Enabled = dataSource.Count > 0; 
} 
+4

Potrei quasi piangere alla vista di una descrizione così semplice ma accurata della soluzione a questo problema che mi dava fastidio da parecchio tempo ormai. Grazie. – stvn

8

Penso che sia un bene che vi sforzate di codice generato leggibile. Ci sediamo e proviamo a eseguire il debug del codice generato occasionalmente, quindi è buono se è facile agli occhi (ofc non modifichiamo mai il codice generato).

Ho adottato uno schema in cui potrei sacrificare la leggibilità del modello per ottenere una leggibilità del codice generato.

Generated code 
<# 
    T4 statements 
#> 
Generated code 

IE #> appaiono sempre dopo una nuova riga e una nuova riga viene aggiunta immediatamente dopo.

Il codice quindi sarebbe cambiato in:

} 
<# 
    } 
#> 
    this.cmbDecisionList.Dat = dataSource; 
    this.btnDec.Enabled = dataSource.Count > 0; 
} 

In questo modo il codice generato tende ad essere formattato come previsto.

Probabilmente non è l'unico modo per mantenere la formattazione come previsto ma è quella che uso.

Spero che questo aiuti.