EnvDTE Visual Studio 2013: получить ProgID?

#c# #visual-studio-2013 #progid

#c# #visual-studio-2013 #progid

Вопрос:

Я пытаюсь создать экземпляр Visual Studio с помощью :

 EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0");
  

И у меня всегда возникает исключение «Недопустимая строка класса», поэтому я предполагаю, что проблема в «VisualStudio.DTE.12.0».
Но я работаю над Visual Studio 2013 12.0.30501, я также пытался поставить только «VisualStudio.DTE», чтобы получить самую последнюю версию, и то же исключение.

Кроме того, я попробовал другой способ :

 Type t = Type.GetTypeFromProgID("VisualStudio.DTE.12.0", true);
dte2 = (EnvDTE80.DTE2)System.Activator.CreateInstance(t, true);
  

Проблема все еще существует, я немного не понимаю… Действительно ли это ошибка недопустимой строки?

Комментарии:

1. Нет, это правильный ProgID, если у вас VS2013. Ваш реестр, должно быть, поврежден, используйте Regedit.exe чтобы взглянуть на HKEY_CLASSES_ROOT HKEY_CLASSES_ROOTVisualStudio.DTE.12.0. С ожиданием, что вы не сможете его найти.

2. Это правильно, я не могу найти в regedit ключ /VisualStudio.DTE.12.0. Как я должен его «создать»?

3. Ваша машина сломана. Бог знает, что еще исчезло. Не стесняйтесь паниковать. Повторный запуск установщика VS может сработать.

4. Что ж, большое вам спасибо, я постараюсь решить это таким образом!

Ответ №1:

Если вы используете Visual Studio 2013 Express, это работает, чтобы исправить это:

 Type t = Type.GetTypeFromProgID("WDExpress.DTE.12.0", true);
var x = (EnvDTE80.DTE2)System.Activator.CreateInstance(t, true);