Generazione di codice in un processo di compilazione

È possibile richiamare la trasformazione di testo come parte del processo di compilazione di una soluzione di Visual Studio. È possibile utilizzare tale soluzione per assicurarsi che i file generati dai modelli siano aggiornati prima che vengano compilati. Ciò consente di evitare che l'utente si dimentichi di fare clic su Trasforma tutti i modelli prima di compilare il progetto o di archiviare il codice. Le attività di trasformazione del testo vengono eseguite sia da Visual Studio che da MSBuild e su un server di compilazione.

Inclusione delle attività di trasformazione del testo nei File di progetto

Installare l'SDK di visualizzazione e modellazione

Per abilitare le attività di compilazione sul computer di sviluppo, installare SDK di visualizzazione e modellazione di Visual Studio.

Per abilitare le attività di compilazione su un server di compilazione, vedere Trasformazione del testo su un server di compilazione.

Modificare il file di progetto

Per richiamare la trasformazione di testo, è necessario modificare il file che definisce il progetto. Queste proprietà non possono essere modificate nell'editor delle proprietà del progetto. Pertanto, è necessario chiudere il progetto e modificarlo come file di testo.

Per modificare il testo come file di progetto

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto quindi fare clic su Scarica progetto.

  2. Fare di nuovo clic con il pulsante destro del mouse sul progetto e fare clic su Modifica progetto.

    Il testo del file di progetto verrà visualizzato nell'editor XML.

Per riaprire il progetto una volta terminate le modifiche

  1. Chiudere l'editor XML.

  2. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto quindi fare clic su Ricarica progetto.

Importare le destinazioni della trasformazione del testo

Le attività di compilazione della trasformazione del testo sono definite in un unico file. È necessario importarlo dopo le destinazioni C# o Visual Basic standard.

Per importare le destinazioni della trasformazione del testo

  1. Cercare nel file una riga simile a una di queste:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

    - oppure -

    <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />

  2. Dopo quella riga, inserire l'importazione del modello di testo:

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

Impostare le proprietà per controllare la modalità di esecuzione della compilazione

Inserire il testo seguente nel file di progetto. Vedere le sezioni seguenti per informazioni su altre proprietà che possono essere inserite in questo gruppo di proprietà.

<PropertyGroup>
 <TransformOnBuild>true</TransformOnBuild>
 <!-- Other properties can be inserted here -->
</PropertyGroup>

TransformOnBuild determina l'esecuzione di tutti i modelli nel progetto quando si compila il progetto.

Richiamo di una trasformazione

Trasformazione di tutti i modelli nella compilazione di un progetto

Se si include la proprietà seguente nel file di progetto, tutti i modelli di testo nel progetto saranno eseguiti ogni qualvolta il progetto viene compilato, subordinatamente alla funzionalità di compilazione incrementale.

<TransformOnBuild>true</TransformOnBuild>

È possibile richiamare le trasformazioni premendo F5 in Visual Studio oppure utilizzando MSBuild. Ad esempio:

msbuild myproject.csproj

Se si omette TransformOnBuild o la si imposta su false, i modelli non saranno trasformati come una compilazione automatica di una parte del progetto.

Aggiunta di percorsi di riferimento

È possibile effettuare delle aggiunte al set di percorsi nel quale l'host cerca gli assembly ai quali viene fatto riferimento nei modelli. Ad esempio:

<ItemGroup>
    <!-- Add VS\...\PublicAssemblies to the list of places
         to look for assemblies used by templates. -->
    <T4ReferencePath Include="$(VsIdePath)PublicAssemblies\" />
</ItemGroup>

Trasformazione di modelli specifici

È possibile trasformare file specificati richiamando l'attività Transform con l'utilità msbuild. Questa attività non dipende dalla proprietà TransformOnBuild e non compila i file di progetto. È necessario importare il file di destinazione del modello di testo come descritto in una sezione precedente.

Ad esempio, per trasformare un file specifico:

msbuild myproj.proj /t:Transform /p:TransformFile=MyTemplate.tt

È possibile utilizzare anche dei caratteri jolly nel parametro TransformFile. Ad esempio, questo comando trasforma tutti i file con estensione .tt sotto la cartella GeneratedCode:

msbuild dsl.csproj /t:Transform /p:TransformFile="GeneratedCode\**\*.tt"

Compilazione incrementale

Per impostazione predefinita, il gestore di compilazione tenta di evitare l'esecuzione di un modello se il relativo file di output è aggiornato. A questo scopo, viene esaminato il file system per vedere quali file vengono letti dal codice del modello. Successivamente vengono confrontate le date di modifica dei file con la data del file di output. Il modello viene eseguito se un file di input risulta essere stato modificato in una data più recente del file di output. Il modello viene eseguito anche se non vi sono informazioni su esecuzioni precedenti di questo stesso modello.

Il risultato è che il file di output sarà rigenerato se è meno recente rispetto a qualsiasi dei file seguenti:

  • File modello di testo

  • File specificati nelle direttive <#@include#>

  • File letti dal codice nel modello

  • File inclusi o letti da un processore di direttiva utilizzato nel modello

Se si desidera assicurarsi che tutti i modelli siano eseguiti ad ogni compilazione, inserire questa proprietà:

<TransformOutOfDateOnly>false</TransformOutOfDateOnly>

Controllo del codice sorgente

Non esiste un'integrazione incorporata specifica con un sistema di controllo del codice sorgente. Tuttavia, è possibile aggiungere estensioni personali, ad esempio estrarre e archiviare un file generato.

Per impostazione predefinita, l'attività di trasformazione di testo evita la sovrascrittura di un file contrassegnato come di sola lettura e, quando viene incontrato questo tipo di file, viene registrato un errore nell'elenco errori di Visual Studio e l'attività non viene completata.

Per specificare che i file di sola lettura devono essere sovrascritti, inserire questa proprietà:

<OverwriteReadOnlyOuputFiles>true</OverwriteReadOnlyOuputFiles>

A meno che si personalizzi il passaggio di post-elaborazione, quando un file viene sovrascritto, verrà registrato un avviso nell'elenco errori.

Personalizzazione del processo di compilazione

È possibile personalizzare il processo di compilazione, ad esempio per estrarre file che sono stati sovrascritti. Vengono forniti due punti per la personalizzazione, i quali vengono chiamati prima e dopo la trasformazione.

Per definire questi punti, definire le proprietà $(BeforeTransform) e $(AfterTransform).

Ad esempio:

<PropertyGroup>
    <BeforeTransform>CustomPreTransform</BeforeTransform>
    <AfterTransform>CustomPostTransform;$(AfterTransform)</AfterTransform>
  </PropertyGroup>
  <Target Name="CustomPreTransform">
    <Message Text="In CustomPreTransform..." Importance="High" />
  </Target>
  <Target Name="CustomPostTransform">
    <Message Text="In CustomPostTransform..." Importance="High" />
  </Target>

In AfterTransform è possibile fare riferimento agli elenchi seguenti:

  • GeneratedFiles - un elenco di file scritti dal processo. Per quelli file che hanno sovrascritto file di sola lettura esistenti,% (GeneratedFiles.ReadOnlyFileOverwritten) sarà true. È possibile estrarre questi file dal controllo del codice sorgente.

  • NonGeneratedFiles - un elenco di file di sola lettura che non sono stati sovrascritti.

Utilizzando questi elenchi, si può, ad esempio, estrarre i file sovrascritti.

Trasformazione del testo in un server di compilazione

Se il server di compilazione viene eseguito su un computer su cui non è installato Visual Studio, è necessario copiare i file seguenti nel computer di compilazione da un computer su cui è installato Visual Studio SDK:

  • \Program Files\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\v4.0\

    • Microsoft.VisualStudio.TextTemplating.10.0.dll

    • Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll

    • Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll

  • \Program Files\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\

    • Microsoft.VisualStudio.TextTemplating.Sdk.Host.10.0.dll
  • \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

    • Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll

Per ulteriori informazioni, vedere Creare e utilizzare un controller di compilazione.

Vedere anche

Altre risorse

SDK di visualizzazione e modellazione di Visual Studio