2010-05-28 73 views
10

我试图运行一个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的错误列表中的一个T4模板显示运行转型以下消息

:系统.IO.FileNotFoundException:找不到文件'C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ data.xml'。

它试图打开TextTemplateFileGenerator自定义工具运行路径上的文件。我希望它打开相对于我的项目路径的文件,因为我的团队中的其他开发人员使用不同的文件夹结构。有谁知道这是否有可能完成?

回答

20

将模板指令中的hosts特定选项更改为“true”并调用Host.ResolvePath(“data.xml”)。

+0

它的工作,谢谢! – 2010-05-28 20:21:25

+2

对于它的价值,这里记录在这里:http://msdn.microsoft.com/en-us/library/bb126478.aspx – MrSlippers 2014-04-01 16:49:42

0

我有一个类似的问题,但Host.ResolvePath不适合我,因为我的相对路径中包含“.. \ ..”。我这样做的工作:

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