У меня есть шаблон T4, который используется с TextTemplatingFilePreprocessor для создания класса, который затем можно использовать для создания выходных данных шаблона.
В начале шаблона T4 я импортирую несколько пространств имен. Например.
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
//...
Я хочу использовать директивы препроцессора чтобы отключить этот импорт другим набором пространств имен (которые предоставляют те же интерфейсы, но отличаются функциональностью от ProductX). Например.
<#
#if(ProductX)
{
#>
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
//...
<#
}
#endif
#>
<#
#if(ProductY)
{
#>
<#@ import namespace="Company.ProductY.Widgets" #>
<#@ import namespace="Company.ProductY.Services" #>
//...
<#
}
#endif
#>
В приведенном выше примере кажется, что импорт создает соответствующие операторы использования в классе независимо от директивы препроцессора. Например.
using Company.ProductX.Widgets
using Company.ProductX.Services
using Company.ProductY.Widgets
using Company.ProductY.Services
Есть ли другой способ использовать препроцессоры в шаблонах T4, чтобы повлиять на сам шаблон, а не только на вывод шаблона?