2013-04-05 3 views
7

Sto usando diversi template T4 per generare diversi file T4, e molti di loro condividono molto lo stesso codice, quindi naturalmente vorrei creare una funzione e metterla in un file diverso che tutti I file T4 potrebbero accedere.Posso eseguire il codice da un altro file in un modello T4 .tt per la generazione del codice?

Tuttavia non riesco a trovare un modo, o Google per un modo per utilizzare effettivamente il codice memorizzato in un altro file.

È possibile? e se è così, c'è un semplice esempio di come farlo?

+0

Puoi dirci un po 'di più dello scenario per favore, in quanto la risposta dipende da come stai usando T4, per esempio Asp.net vista impalcatura vs trasformazioni di base nella tua soluzione. – GarethJ

+0

@GarethJ I file t4 stanno cercando tabelle ID in SQL e generano un file .cs con enumerazioni che corrispondono al valore id. Grazie per l'aiuto finora! =) – Kyle

risposta

6

Dalla tua domanda, sembra che tu stia semplicemente usando T4 in un normale file di modello nella tua soluzione. In questo caso, è sufficiente utilizzare la direttiva <#@ include #> per inserire il codice condiviso. Si tratta di un meccanismo di inclusione di testo non elaborato, simile a #include di C/C++, quindi è possibile spostarsi tanto o poco quanto si vuole condividere in altri file.

Vedere i documenti here.

Vale la pena notare che, al momento, la direttiva include non funziona nei modelli di scaffolding di ASP.Net.

Se si desidera condividere il codice con il normale progetto C#, ciò è possibile, ma è necessario creare il codice condiviso in un assembly a cui è possibile fare riferimento. Non è possibile utilizzare semplicemente la direttiva <#@ include #> per inserire direttamente un file .cs poiché le direttive non si annidano all'interno dei blocchi funzione di controllo o classe.

È possibile fare riferimento a un gruppo di supporto contenente il codice condiviso utilizzando la direttiva <#@ assembly #> documentata here.

+0

Sto provando '<# @ include file =" test.cs "#>' ma se provo ad usare una classe dal mio file test.cs, dice che non può essere trovata. – Kyle

+0

Ah, vuoi includere il normale C#, codice, non specificamente frammenti T4. Rivedrò la mia risposta – GarethJ