Как использовать последние возможности С# 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 функциональность снова разбивается.