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

Tan*_*agi 2 c# extensibility visual-studio vsix visual-studio-extensions

我正在开发一个 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!");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mon*_*nie 5

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

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;
    }
Run Code Online (Sandbox Code Playgroud)