2009-10-07 12 views
5

Devo specificare il mio T4 per usare C# 4.0, per rendere i miei file tt? Ho provato ad utilizzareCome posso specificare T4 (Modelli di testo) per utilizzare C# 4.0, in VS2010?

<#@ template language="C#v4.0" debug="true" #> 

Ma quando io uso una variabile dinamica, come questo

dynamic x=10; 
Write(x.ToString()); 

sto ottenendo questi errori

Error 2 Compiling transformation: Predefined type 'Microsoft.CSharp.RuntimeBinder.CSharpSetMemberBinder' is not defined or imported e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1 1 
Error 3 Compiling transformation: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpInvokeMemberBinder..ctor' e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1 1 
Error 4 Compiling transformation: Missing compiler required member 'System.Runtime.CompilerServices.CallSite.Create' e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1 1 
Error 5 Compiling transformation: One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll? e:\Projects\DynamicModel\DynamicModel\ModelGenerator.tt 7 8 
Error 6 A namespace cannot directly contain members such as fields or methods e:\projects\DynamicModel\DynamicModel\ModelGenerator.cs 1 1 DynamicModel 

Inoltre, si ricorda che sto usando TextTemplatingFileGenerator e Non modelli di pre-processore

+0

Hai provato a guardare i modelli forniti con VS2010? – Lazarus

+0

Sì, va bene fino a quando non si utilizza una variabile dinamica – amazedsaint

risposta

4

Trovato che è necessario specificare anche gli assembly corretti.

L'aggiunta di questo garantisce che si stia utilizzando C# 4.0.

<#@ template language="C#" debug="true" #> 
<#@ output extension=".txt" #> 
<#@ Assembly Name="System.Core, Version=4.0.0.0, Culture=neutral" #> 
<#@ Assembly Name="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral" #> 

Come mai, per qualche motivo, durante il tempo di T4 trasformazione, l 'invio dinamica non funziona ancora da T4, chiedendosi perché. Da T4 genera un errore di runtime, lo stesso codice fa bene direttamente da un file cs.

+0

Hai provato a utilizzare T4 precompilato? http://www.olegsych.com/2009/09/t4-preprocessed-text-templates/ –

+0

infatti ho capito bene, grazie – amazedsaint

+0

E FYI sto usando un host template personalizzato, non eseguendo direttamente t4 da VS :) – amazedsaint

2

credo che di default il motore T4 può solo usare 4.0, anche se mi piacerebbe fare in modo che tutte le DLL si fa riferimento siano corrette per il vostro errore.