Visual studio 打字机相对目录

Visual studio 打字机相对目录,visual-studio,visual-studio-2017,typewriter,Visual Studio,Visual Studio 2017,Typewriter,我正在使用Visual Studio和Visual Studio 2017的扩展。以下是Typescript模板文件 ${ using System.IO; Template(Settings settings) { settings.IncludeProject("ProjectName"); } string Test(Class c) { //return Path.GetDirectoryName(Pat

我正在使用Visual Studio和Visual Studio 2017的扩展。以下是Typescript模板文件

${
    using System.IO;

    Template(Settings settings)
    {
        settings.IncludeProject("ProjectName");
    }

    string Test(Class c)
    {
        //return Path.GetDirectoryName(Path.GetDirectoryName( System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase ))); // > file:\C:\Users\[user]\AppData\Local
        //return Environment.CurrentDirectory; // > C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE
        return String.Join(", ", Directory.GetFiles("relative\path")); // > System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\relative\path'.
    }

}
$Classes(ProjectName.Models.*)[
export class $Name {
    $Properties[
    public $Name: $Type;]
    // $Test
}]
使用
Directory.GetFiles
时,路径相对于
C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\Common7\IDE
而不是相对于模板文件或项目。如何获取相关文件

另外,不确定这是否是打字机或VisualStudio扩展的具体情况

编辑
此后,我尝试:


但是我得到
找不到类型或命名空间名称“EnvDTE”(是否缺少using指令或程序集引用?
,我不知道如何在现有扩展中引用程序集。如果我可以使用DTE,这将解决最初的问题。

类的$Parent属性是$File,它有一个$FullName属性,它是绝对文件名。我使用它来获取接口的文件名:

string FileName(Interface @interface)
{
   return (@interface.Parent as File).FullName;
}

也许你可以从那里找到模板文件的路径?

多亏了上面的评论,我通过以下几点实现了这一点:

#reference EnvDTE 
#reference Microsoft.VisualStudio.Shell.15.0

${    
    Template(Settings settings)
    {
        EnvDTE.DTE dte = (EnvDTE.DTE)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(EnvDTE.DTE));
        var fileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(dte.Solution.FullName), "myfile.txt");
    }

}

#参考EnvDTE#参考Microsoft.VisualStudio.Shell.15.0,但下一步是什么?solution目录不是.tst模板目录只是为了详细说明Alex的答案,如果您在文件顶部(在${}括号外)添加以下行,它将允许您访问EnvDTE和DTE接口:
#reference EnvDTE#reference Microsoft.VisualStudio.Shell.15.0但是-它抱怨“当前上下文中不存在名称'GetService'@AlexBuchatski,我还缺少另一个参考资料吗?
#reference EnvDTE 
#reference Microsoft.VisualStudio.Shell.15.0

${    
    Template(Settings settings)
    {
        EnvDTE.DTE dte = (EnvDTE.DTE)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(EnvDTE.DTE));
        var fileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(dte.Solution.FullName), "myfile.txt");
    }

}