【问题标题】:How to open a file on relative path using T4?如何使用 T4 在相对路径上打开文件?
【发布时间】:2011-02-25 07:02:12
【问题描述】:

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

【问题讨论】:

    标签: visual-studio-2010 t4


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    我遇到了类似的问题,但 Host.ResolvePath 对我不起作用,因为我的相对路径中包含“..\..”。我通过这样做来解决它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 2017-09-05
      • 1970-01-01
      • 2018-11-30
      • 2016-10-05
      • 2021-05-31
      • 2016-05-24
      • 1970-01-01
      相关资源
      最近更新 更多