Ответ 1
Измените параметр hostpecific в директиве шаблона на "true" и вызовите Host.ResolvePath( "data.xml" ).
Я пытаюсь запустить шаблон 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. Мне бы хотелось, чтобы он открыл файл относительно моего пути к проекту, потому что другие разработчики в моей команде используют разные структуры папок. Кто-нибудь знает, возможно ли это сделать?
Измените параметр hostpecific в директиве шаблона на "true" и вызовите Host.ResolvePath( "data.xml" ).
У меня была аналогичная проблема, но Host.ResolvePath не работал у меня, потому что мой относительный путь содержал ".. \.." в нем. Я работал над этим, делая это:
string ttpath = this.Host.TemplateFile;
string resolvedPath = Path.GetFullPath(Path.GetDirectoryName(ttpath) + @"..\..\<Path To File>");