Обнаружено, что вы также должны указать правильные сборки.
Добавление этого гарантирует, что вы используете 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.