Visual Studio SDK 2017 изменил некоторые функции в проекте расширяемости. Несколько месяцев назад я пытался создать собственное расширение для Visual Studio my IDE. Затем я пишу код и работаю с этим проектом. Когда я проектировал своего архитектора, у меня возникла проблема, как использовать путь к папке решения как String.
Затем я начал его искать. Вы все знаете, когда вы создаете приложение Windows с помощью C # или VB.net, как получить путь к вашему приложению.
Application.StartupPath
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.GetCurrentDirectory()
Environment.CurrentDirectory
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
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); } }