Visual studio 打字机相对目录
我正在使用Visual Studio和Visual Studio 2017的扩展。以下是Typescript模板文件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
${
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");
}
}