Как использовать последние возможности С# v6 в шаблонах T4?

Я пытаюсь запустить новый шаблон T4 в Visual Studio 2015. Однако он не может скомпилировать в этой строке:

var message = $"Linked table '{linkedTable}' does not exist.";

Компилятор сообщает, что символ '$' является неожиданным. Этот синтаксис должен, однако, быть действительным в С# v6, в соответствии с новыми строковыми интерполяциями.

Есть ли способ заставить движок T4 использовать новую версию С#, , кроме как компилировать мой код во внешней библиотеке?

UPDATE:

Вот элементы объявления для файла в качестве ссылки:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".sql" #>
<#@ SqlModelDirective processor="SqlModelDirectiveProcessor" #>

<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.SqlServer.Dac" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Microsoft.SqlServer.Dac.Model" #>

Помимо элемента SqlModelDirective это довольно стандартное я считаю.

Ответы

Ответ 1

Вы не можете использовать С# 6 в шаблонах T4 прямо сейчас, поскольку они не используют последний компилятор.

Вы можете указать параметры компилятора в атрибуте compilerOption директивы . Если использовался последний компилятор, вы можете использовать:

<#@ template debug="false" hostspecific="false" language="C#" 
    compilerOptions="/langversion:6" #>

Когда я попробовал это, я получил следующую ошибку:

Компиляция преобразования: неверная опция "6" для /langversion; должен быть ISO-1, ISO-2, 3, 4, 5 или по умолчанию

UPDATE

Нашел эту дискуссию в репозитории ASP.NET на Github. Кажется, команда ASP.NET надеется заменить T4 на Razor (что неплохое представление BTW). Интересно, имеет ли @davidfowl больше информации;)

ОБНОВЛЕНИЕ 2

Дэвид Фоулер ответил на Twitter - T4 использует CodeDom, который еще не обновлен, чтобы использовать Roslyn. Хотя есть пакет NuGet с заменами поставщиков CodeDom, он работает только на проектах ASP.NET 4.x, а не на T4.

Так что теперь нет С# 6 в T4.

Ответ 2

Вы должны перейти на Visual Studio 2015 Update 2, выпущенный 30 марта 2016 года, который вводит такие функции. В разделе "Другие изменения":

Расширенные текстовые шаблоны T4, чтобы теперь они поддерживали С# 6.0.

Однако в Visual Studio 2015 Update 3 функциональность снова разбивается.