2013-11-20 1 views
1

Моя команда использует шаблоны T4 для создания некоторого нашего кода на основе файла конфигурации XML и XML. Из-за синтаксического анализа структуры XML в POCO мы решили, что с использованием общего ресурса (A «master» T4 template) для синтаксического анализа и хранения значений, для которых все остальные T4-шаблоны будут использовать для генерации своего соответствующего кода. ТОЛЬКО T4 с пути к XML - это шаблон-мастер.Относительный путь T4 для шаблона «Мастер», а не для детей

Так, установив hostspecific="true" и указав путь относительно хоста, Мастер T4 работает прекрасно, но с добавлением (с использованием include file="..."), и когда один из шаблонов ребенок T4 работает, относительный путь XML является теперь не правильно ... Он ищет XML-файл в местоположении теперь относительно ребенка.

Предполагается, что Мастер проанализирует XML и сохранит данные в памяти способами классов и свойств, а потом детям придется извлекать необходимую информацию из свойств шаблона мастера.

Возможно ли решение hostspecific?

+2

Вы пытались использовать $ (SolutionDir) или $ (ProjectDir), чтобы полностью квалифицировать включенные пути? – FuleSnabel

ответ

0

Включенные файлы копируются в класс, созданный из вашего дочернего шаблона. Я сделал что-то похожее на то, что вы пытаетесь усвоить.

Добавить поле в шаблон мастера, содержащий шаблон Path to masters. В шаблоне Masters просто используйте его.

<#@ template debug="true" language="C#" hostSpecific="true" #> 
<#@ output extension=".cs" #> 

<#@ include file="..\\..\commonT4\master.ttinclude" #> 


<# 
    PathToMaster = @"..\\..\commonT4\"; 
0

Вместо того, чтобы создавать шаблон, который ссылается на ваш «главный» шаблон с использованием «include», почему бы не поместить ваш «главный» шаблон в центральное место для решения, а затем добавить шаблон в качестве ссылки, где это необходимо в отдельном проекты. Таким образом, шаблон запускается в проекте, но размещается из его исходного местоположения.

 Смежные вопросы

  • Нет связанных вопросов^_^