Как я могу указать T4 (текстовые шаблоны) для использования C # 4.0 в VS2010? - PullRequest
5 голосов
/ 07 октября 2009

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

<#@ 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 и Не шаблоны препроцессора

Ответы [ 2 ]

5 голосов
/ 07 октября 2009

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

Добавление этого гарантирует, что вы используете 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 динамическая диспетчеризация все еще не работает с T4, задаваясь вопросом, почему. С T4 он выдает ошибку времени выполнения, тот же код работает хорошо прямо из файла cs.

2 голосов
/ 24 октября 2009

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

...