Domanda

Quando posso modificare T4, lo script viene eseguito ogni volta che posso passare ad un altro file.È OK per una rapida e semplice script, ma alcuni script di prendere molto tempo per eseguire.C'è un modo per disattivare questo comportamento?Voglio lo script da eseguire solo quando salvo I file T4 o manualmente, scegliere "Esegui Strumento Personalizzato" dal menu.

È stato utile?

Soluzione

T4 è collegata al meccanismo di strumento personalizzato ( IVsSingleFileGenerator ) in C # / VB sistemi di progetto, che gli conferisce la corsa su Salva, eseguire menù strumento personalizzato e anche la corsa sul comportamento di commutazione scheda - tutto per il prezzo di attuazione di un semplice interfaccia.

Purtroppo questo significa che T4 ha anche sostanzialmente alcun controllo su quei comportamenti, che sono lo standard per strumenti personalizzati.

In alternativa può essere quella di utilizzare il supporto T4 MsBuild nel VS modellazione e visualizzazione SDK per fare T4 al momento della compilazione e quindi disattivare lo strumento personalizzato. Mi informo con il mio collega che ha costruito il supporto msbuild se usa lo strumento personalizzato per identificare il set di modelli o no e di nuovo post per il filo.

Altri suggerimenti

Ho avuto lo stesso problema esatto. Ho seguito la procedura descritta in questo articolo http://msdn.microsoft.com/en- us / library / ee789839.aspx sulla scissione dei modelli in un altro progetto e condividere i file di output.

E 'dettagli come spegnere il TextTemplatingFileGenerator strumento allegato al modello facendo clic destro il modello e deselezionando la CustomTool di proprietà. In questo modo il codice del modello di generazione quando ha salvato ... ma è ancora corre quando si passa le schede!

Credo che l'unico modo per aggirare questo sarebbe per spostare tutto il codice il modello in un nuovo file con un suffisso diverso (come ttinclude o T4 o qualcosa) e poi includere questo file nel file di template T4 reale utilizzando l'inclusione direttiva. In questo modo non avrai mai bisogno di aprire il file per modificare il modello in modo da non ci vorrà correre per caso.

Quindi, in un file chiamato MyTemplate.tt:

<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="Include\MyTemplateCodeBehind.t4" #>
<#@ output extension=".vb"#>
<# ' Nothing to see here! #>

Mentre nell'altro file chiamato MyTemplateCodeBehind.t4:

<#@ template language="VB" debug="false" hostspecific="true"#>
<#
   For Each something In somecollection
#>
   <#= something.PrintMyCode() #>
<#
   Next

#>

Quello che sto facendo (probabilmente un metodo cattivo) sta scrivendo all'inizio del file tt una linea eccezione come:

<# throw new Exception(); #>

Perché io lancerà un'eccezione alla fermata di processo e quando finisco tutto il lavoro non mi resta che rimuovere questa riga. :)

Provare a destra dopo la compilazione direttive, aggiungere un ritorno a uscire metodo

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
 output extension="Repository.cs"#><#
return string.Empty;     //<-- add this line!!! 

...

modelli T4 vengono eseguiti quando il file viene salvato. Se si dispone di installazione VS di salvataggio automatico quando si scheda via dal file che potrebbero spiegare il comportamento. Esaminare la configurazione VS per determinare se VS sta salvando il file quando si scheda via.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top