2012-10-09 11 views
5

Sto provando a generare codice su ogni build del mio progetto utilizzando VS2012.Generazione di T4 su Build utilizzando VS 2012

Ho 3 progetti nella mia soluzione:

  • progetto 1 ha alcune classi
  • progetto 2 ha il modello generico
  • progetto 3 ha il modello che leggere un file JSON e quindi chiamare il generico modello modulo progetto 2 per generare il suo file.

Quando faccio clic su Costruisci/Trasforma tutti i modelli T4, non ci sono problemi, la generazione va bene.

Ma sto provando a configurare la mia generazione per includere questo passaggio automaticamente ad ogni generazione.

Ho aggiunto questo codice al mio csproj:

<Import Project="$MsBuildToolsPath)\Microsoft.CSharp.Targets" /> 
<PropertyGroup> 
    <TransformOnBuild>true</TransformOnBuild> 
    <OverWriteReadOnlyOutputFiles>true</OverWriteReadOnlyOutputFiles> 
</PropertyGroup> 
<Import Project="$(MSBuildExtensionPath32)\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets"/> 

ho inventata io il percorso "\ Microsoft \ VisualStudio \ v11.0 \ TextTemplating \ Microsoft.TextTemplating.targets" Da quello che trovato sul mio pc L'esempio l'ho preso dal era: get-visual-studio-to-run-a-t4-template-on-every-build

Il problema deriva da questa linea che sto usando: < # @ include file = "$ (SolutionDir) \ xxx \ yyy \ zzz \ mytemplate.tt">

e ricevo l'errore:

riuscite a risolvere includere testo per il file: D: \ Projects \ pppp \ qqq \ eeee \ $ (SolutionDir) \ xxx \ yyy \ zzz \ mytemplate.tt

Dato che il modello funziona bene quando viene generato "a mano" (Costruisci/Trasforma tutti i modelli T4), mi chiedo quale potrebbe essere il problema per generarlo in fase di costruzione.

Qualche idea?

risposta

2

Il problema è che quando si esegue il modello durante il processo di generazione viene eseguito con host diverso e la macro $ (SolutionDir) non esiste. Prova a utilizzare il percorso relativo, ad es.

<#@ include file="..\xxx\yyy\zzz\mytemplate.tt"> 
+0

Che potrebbe funzionare con include ma per quanto riguarda il montaggio? Ho usato $ (SolutionDir) per individuarli, ho lo stesso tipo di errore se provo il percorso relativo. Il nome dell'assembly o il codebase forniti non erano validi. Grazie per il tuo aiuto. – Arthis

+0

Ho finalmente utilizzato il percorso assoluto perché tutto il resto funzionava correttamente e avevo bisogno di andare avanti. – Arthis

+0

Non sono sicuro del problema con il percorso relativo, ma puoi provare il metodo 'Host.ResolvePath' –

Problemi correlati