2009-10-07 3 views
5

Мне нужно указать мой T4 для использования C# 4.0, чтобы отобразить мои файлы tt? Я попытался с помощьюКак я могу указать T4 (текстовые шаблоны) для использования C# 4.0 в VS2010?

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

Но когда я использую динамическую переменную, как этот

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

Я получаю эти ошибки

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 

Кроме того, обратите внимание, что я использую TextTemplatingFileGenerator и Не препроцессорные шаблоны

+0

Вы пробовали смотреть шаблоны, снабженные VS2010? – Lazarus

+0

Да, это хорошо, если вы не используете динамическую переменную – amazedsaint

ответ

4

Установлено, что вы должны указать правильные сборки.

Добавление этого файла гарантирует, что вы используете 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" #> 

Как всегда, по какой-то причине во время трансформации t4, динамическая диспетчеризация еще не работает с Т4, интересно, почему. Из T4 он выдает ошибку времени выполнения, тот же код отлично работает непосредственно из файла cs.

+0

Вы пытались использовать предварительно скомпилированный T4? http://www.olegsych.com/2009/09/t4-preprocessed-text-templates/ –

+0

infact Я получил это правильно, спасибо – amazedsaint

+0

И FYI Я использую собственный хост шаблона, а не прямой запуск t4 из VS :) – amazedsaint

2

Я считаю, что по умолчанию двигатель T4 может только использовать 4.0, хотя я бы хотел, чтобы все DLL-ссылки, на которые вы ссылаетесь, верны для вашей ошибки.