在 C# VSIX 中,如何获取当前文件名及其当前正在编辑的相对路径?

In C# VSIX, How to get current file name along with its relative path which is currently being editing?

我正在开发一个 VSIX 项目,我想在其中获取正在 VS IDE(或实验性 [=26] 中编辑的当前文件名和路径(相对于项目) =])?我该怎么做?

我尝试了以下代码:

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!");
}

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

如果我添加代码:System.IO.Path.GetDirectoryName(dte.Solution.FullName); 它将 return 我的 TextAdornment class 的路径详细信息(一个 class,通过安装我的整个插件来管理编辑器任务,我在这里写 dte.ActiveDocument.FullName; 代码) .但是我想要在我的实验 window.

中打开的文件的文件详细信息

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

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

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

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

编辑

菜单按钮示例,returns实验性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;
    }