【问题标题】:In C# VSIX, How to get current file name along with its relative path which is currently being editing?在 C# VSIX 中,如何获取当前文件名及其当前正在编辑的相对路径?
【发布时间】:2020-01-13 14:38:31
【问题描述】:

我正在处理一个 VSIX 项目,我想在其中获取正在 VS IDE(或实验窗口)中编辑的当前文件名和路径(相对于项目)?我该怎么做?

我尝试了以下代码:

var currentDocInfo = this._textDocumentFactoryService.TryGetTextDocument(this.view.TextBuffer, out this.TextDocument);            

if (currentDocInfo)
{
    string test = this.TextDocument.FilePath;
    MessageBox.Show(test);
}
else
{
    //MessageBox.Show("Nothingg!");
}

此代码返回当前打开文件的绝对路径。我需要获取相对于当前项目/解决方案的路径。如果我能得到解决方案的名称,我会找到项目的相对路径。

如果我添加代码:System.IO.Path.GetDirectoryName(dte.Solution.FullName); 它将返回我的 TextAdornment 类的路径详细信息(一个类,通过安装我的整个插件来管理编辑器任务,这里我正在编写 dte.ActiveDocument.FullName; 代码)。但我想要在我的实验窗口中打开的文件的文件详细信息。

【问题讨论】:

  • 您在 3 小时前提出并回答并删除了同一个问题:stackoverflow.com/questions/59716129/… 这是怎么回事?
  • 该问题最终被删除,我需要对该问题进行一些更改。我需要获取从解决方案到当前打开文件的相对路径。我标记的答案没有让我获得相对路径。我也在寻找解决方案/项目名称,如果我得到了,我将能够执行字符串操作来获取相对路径。
  • 您使用的是什么版本的 .net?
  • @Train .NET Framework 4.7.2

标签: c# visual-studio visual-studio-extensions vsix extensibility


【解决方案1】:

如果你想在你的实验窗口中获取当前打开的文本编辑器的文件名

DTE dte = Package.GetGlobalService(typeof(SDTE)) as DTE; string docName = dte.ActiveDocument.Name;

编辑

菜单按钮示例,如果单击菜单按钮,则返回实验性 Visual Studio 实例中打开文档的当前文件名

private void Execute(object sender, EventArgs e)
    {
        /// Get Open Documents
        string docName = GetActiveTextEditor();
        if (docName == null) return;

    }

internal static string GetActiveTextEditor()
    {
        DTE dte = Package.GetGlobalService(typeof(SDTE)) as DTE;
        string docName = dte.ActiveDocument.Name;
        return docName;
    }

【讨论】:

  • 我不想在实验窗口中一次又一次地编写这段代码。我希望我的插件能够做到这一点。如何将此代码放入我的插件代码中,以便在我的实验窗口中获取当前打开的文本编辑器的文件名?
  • 你不要把这段代码写到实验窗口,而是写到插件里。例如:您创建一个菜单按钮,您将获得一个私有 void Execute(object sender, EvenArgs e) 并将上面的代码添加到 Execute 函数中。
  • 然后它将返回存在Execute(object sender, EvenArgs e)方法的类的名称或路径。
  • 你能编辑你上面的代码吗?对我来说,我的代码完美运行,并为我提供了实验窗口的文件名
【解决方案2】:

当前文件名和路径:dte.ActiveDocument.FullName;

解决方案目录:System.IO.Path.GetDirectoryName(dte.Solution.FullName);

【讨论】:

  • 这个解决方案将返回我当前 TextAdornment 类的路径详细信息(我正在编写 dte.ActiveDocument.FullName; 这段代码的插件中的一个类)。但我想要在我的实验窗口中打开的文件的文件详细信息。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多