Visual Studio SDK 2017 изменил некоторые функции в проекте расширяемости. Несколько месяцев назад я пытался создать собственное расширение для Visual Studio my IDE. Затем я пишу код и работаю с этим проектом. Когда я проектировал своего архитектора, у меня возникла проблема, как использовать путь к папке решения как String.

Затем я начал его искать. Вы все знаете, когда вы создаете приложение Windows с помощью C # или VB.net, как получить путь к вашему приложению.

  1. Application.StartupPath
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
  3. AppDomain.CurrentDomain.BaseDirectory
  4. System.IO.Directory.GetCurrentDirectory()
  5. Environment.CurrentDirectory
  6. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

Но мне очень хотелось, чтобы после того, как проект был открыт в Visual Studio Solution Explorer, выберите путь (это особенно важно для пользователей VS SDK).

Затем я нашел документацию по использованию компонента EnvDTE и получил текущий путь к проекту из интерфейса Visual Studio SolutionFolder.

Сегодня я покажу, как получить текущий путь к проекту в виде строки из интерфейса папки решений Visual Studio.

Во-первых, я импортировал EnvDTE (в EnvDTE.dll). Затем я объявил свойство ProejectFullName

string ProejectFullName{ get; }

Строка, представляющая полный путь и имя файла объекта проекта.

public void GetmyFilePath(DTE2 dte)
{  
    try
    {   // Open a project before running this sample.
        Project prj = dte.Solution.Projects.Item(1);
        Projects prjs;
        string msg, msg2 = "Global Variables:";
        msg = "FileName: " + prj.FileName;
        msg += "\nProejectFullName: " + prj.ProejectFullName;
        msg += "\nProject-level access to " + prj.CodeModel.CodeElements.Count.ToString() +
            " CodeElements through the CodeModel";
        prjs = prj.Collection;
        msg += "\nThere are " + prjs.Count.ToString() + " projects in the same collection.";
        msg += "\nApplication containing this project: " + prj.DTE.Name;
        if (prj.Saved)
            msg += "\nThis project hasn't been modified since the last save.";
        else
            msg += "\nThis project has been modified since the last save.";
        msg += "\nProperties: ";
        foreach (Property prop in prj.Properties)
        {
            msg += "\n  " + prop.Name;
        }
        foreach (String s in (Array)prj.Globals.VariableNames)
        {
            msg2 += "\n  " + s;
        }

        MessageBox.Show(msg, "Project Name: " + prj.Name);
        MessageBox.Show(msg2);
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}