Доступ к системе проектов из расширения редактора Visual Studio MEF - PullRequest
4 голосов
/ 22 марта 2010

Я пишу расширение для редактора Visual Studio, используя VS 2010 SDK RC. Я хотел бы иметь возможность выяснить, каковы ссылки на текущий проект. Как получить доступ к проекту, соответствующему текущему редактору?

Документация о расширениях редактора не содержит информации о том, как получить доступ к нередакторным частям Visual Studio. Я провел некоторый поиск, и похоже, что в VS2008 вы можете написать надстройки, которые будут обращаться к системе проекта, но я пытаюсь получить эту функциональность из расширения редактора MEF.

1 Ответ

10 голосов
/ 22 марта 2010

Даниил -

Переход от редактора к проекту - это многоэтапный процесс. Сначала вы получаете имя файла в редакторе, и оттуда вы можете найти содержащий проект.

Предполагая, что у вас есть IWPFTextView, вы можете получить имя файла, например:

public static string GetFilePath(Microsoft.VisualStudio.Text.Editor.IWpfTextView wpfTextView)
{
    Microsoft.VisualStudio.Text.ITextDocument document;
    if ((wpfTextView == null) ||
            (!wpfTextView.TextDataModel.DocumentBuffer.Properties.TryGetProperty(typeof(Microsoft.VisualStudio.Text.ITextDocument), out document)))
        return String.Empty;

    // If we have no document, just ignore it.
    if ((document == null) || (document.TextBuffer == null))
        return String.Empty;

    return document.FilePath;
}

Как только у вас есть имя файла, вы можете получить его родительский проект следующим образом:

using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Interop;

public static Project GetContainingProject(string fileName)
{
    if (!String.IsNullOrEmpty(fileName))
    {
        var dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE));
        if (dte2 != null)
        {
            var prjItem = dte2.Solution.FindProjectItem(fileName);
            if (prjItem != null)
                return prjItem.ContainingProject;
        }
    }
    return null;
}

Из проекта вы можете добраться до модели кода, и я предполагаю, что ссылки, но мне еще не нужно было это делать.

Надеюсь, это поможет ...

~ Кэмерон

...