Visual studio 2010 如何使用T4在相对路径上打开文件?

Visual studio 2010 如何使用T4在相对路径上打开文件?,visual-studio-2010,t4,Visual Studio 2010,T4,我正在尝试运行一个T4模板,该模板打开一个XML文件,并使用它的内容生成代码工件。然而,当我尝试运行类似于下面的T4模板时,我收到了一条错误消息 <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Xml.dll" #> <#@ assembly name="System.Xml.Linq.dll" #> <#@ import

我正在尝试运行一个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"); #>
...

命名空间控制台应用程序1
{
...
Visual Studio 2010错误列表显示以下消息

正在运行转换:System.IO.FileNotFoundException:找不到文件“C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\data.xml”


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

将模板指令中的hostspecific选项更改为“true”然后调用Host.ResolvePath(“data.xml”)。

我遇到了类似的问题,但Host.ResolvePath对我不起作用,因为我的相对路径中包含“.\..”。我通过执行以下操作来解决此问题:

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

这里记录了它的价值:因此:string myFile=File.ReadAllText(this.Host.ResolvePath(“myFile.txt”);