В C# VSIX, Как получить текущее имя файла вместе с его относительным путем, который в настоящее время редактируется? - PullRequest
0 голосов
/ 13 января 2020

Я работаю над проектом 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; code). Но мне нужны подробности файла, который открывается в моем экспериментальном окне.

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Текущее имя файла и путь: dte.ActiveDocument.FullName;

Каталог решения: System.IO.Path.GetDirectoryName(dte.Solution.FullName);

0 голосов
/ 15 января 2020

Если вы хотите получить имя файла текущего открытого текстового редактора в вашем экспериментальном окне

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

EDIT

Пример для кнопки меню возвращает текущее имя файла открытого документа в экспериментальном экземпляре 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;
    }
...