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

时间:2010-05-28 19:35:44

标签: visual-studio-2010 t4

我正在尝试运行一个打开XML文件的T4模板,并使用它来生成代码工件。但是,当我尝试运行类似于下面的

的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自定义工具运行的路径上打开该文件。我希望它相对于我的项目路径打开文件,因为我团队中的其他开发人员使用不同的文件夹结构。有谁知道这是否有可能实现?

2 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:0)

我遇到了类似的问题,但Host.ResolvePath对我没有用,因为我的相对路径包含&#34; .. \ ..&#34;在里面。我通过这样做来解决这个问题:

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