У меня есть расширение Visual Studio 2010, файл .vsix. Я могу получить экземпляр DTE для моего конкретного экземпляра Visual Studio, который я подтверждаю печатью dte_instance.Solution.Fullname. Но для моего экземпляра DTE2, похоже, он дает мне информацию о неправильном экземпляре Visual Studio.
Вот рабочий процесс: среда разработки Visual Studio открыта, есть код для расширения. Запустите проект, который вызывает запуск нового экземпляра Visual Studio, в котором установлено расширение. Нажмите кнопку «Мое меню» (в новой IDE), которая запускает следующий код:
DTE dte;
DTE2 dte2, dte2Macros;
dte = (DTE)GetService(typeof(DTE));
dte2 = (DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
dte2Macros = (DTE2)dte2.MacrosIDE;
//this returns what I expect, the solution name in the newer IDE.
MessageBox.Show("solution name: " + dte.Solution.FullName);
//code to get the startup project from MSDN
//http://msdn.microsoft.com/en-us/library/ms228782.aspx
SolutionBuild2 sb = (SolutionBuild2)dte2.Solution.SolutionBuild;
string msg = "";
Int32 configs = sb.SolutionConfigurations.Count;
foreach (String item in (Array)sb.StartupProjects)
{
msg += item;
}
//this returns a project from the development IDE, the one I don't want.
System.Windows.Forms.MessageBox.Show("startup project is: " + msg);
Project startupProject = dte2.Solution.Item(msg);
Я нашел несколько ссылок на получение объекта DTE2 в надстройке с помощью метода connect (), но не смог найти аналогичный обратный вызов для расширений.
Вопрос: как получить экземпляр DTE2 для IDE, в которой выполняется расширение?