2010-05-28 75 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>"); 
相關問題