Как открыть файл по относительному пути с помощью T4?

Я пытаюсь запустить шаблон T4, который открывает файл XML, и использует его содержимое для генерации артефакта кода. Тем не менее, я получаю сообщение об ошибке, когда пытаюсь запустить шаблон T4, аналогичный тому, который приведен ниже

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Xml.dll" #>
<#@ assembly name="System.Xml.Linq.dll" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Xml.Linq" #>
<#@ output extension=".cs" #>
namespace ConsoleApplication1
{
<# XElement fragment = XElement.Load("data.xml"); #>
...

В списке ошибок Visual Studio 2010 отображается следующее сообщение

Запуск преобразования: System.IO.FileNotFoundException: Не удалось найти файл 'C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\data.xml'.

Он пытается открыть файл на пути, где выполняется собственный инструмент TextTemplateFileGenerator. Мне бы хотелось, чтобы он открыл файл относительно моего пути к проекту, потому что другие разработчики в моей команде используют разные структуры папок. Кто-нибудь знает, возможно ли это сделать?

Ответ 1

Измените параметр hostpecific в директиве шаблона на "true" и вызовите Host.ResolvePath( "data.xml" ).

Ответ 2

У меня была аналогичная проблема, но Host.ResolvePath не работал у меня, потому что мой относительный путь содержал ".. \.." в нем. Я работал над этим, делая это:

string ttpath = this.Host.TemplateFile;
string resolvedPath = Path.GetFullPath(Path.GetDirectoryName(ttpath) + @"..\..\<Path To File>");