Шаблоны T4 выполняются во временном контексте, который создает Visual Studio, и находятся далеко за пределами вашего веб-приложения. Этот временный контекст предназначен для генерации выходного текстового файла. Это никоим образом не веб-приложение, оно не связано с веб-приложением, которое вы создаете. В результате, System.Web.HttpContext не имеет назначенного значения, и MapPath () не может быть вызвано.
Environment.CurrentDirectory тоже не сильно помогает, так как шаблон выполняется в некоторой временной папке.
Что вы можете сделать? Если вы можете использовать абсолютные пути, продолжайте и сделайте это. В противном случае добавление специфичного для хоста атрибута в директиву <# @ template #> позволит вам перейти к переменной Host и ее ResolvePath () метод. ResolvePath позволяет разрешать пути относительно самого файла TT.
Например (example.tt):
<#@ template language="C#" hostspecific="True" #>
<#@ output extension=".cs" #>
// <#=Host.ResolvePath(".")#>
Вывод (example.cs):
// C:\Users\myusername\Documents\Visual Studio 2008\Projects\MvcApplication1\MvcApplication1\.
Пост Олега Сыча о директиве шаблона содержит раздел об атрибуте хоста.