Создайте проект Visual Studio программно - PullRequest
10 голосов
/ 09 января 2012

Поскольку мой вопрос говорит, что я хочу создать новый проект на основе шаблона, который уже создал проверенный и работает нормально, но у меня есть две проблемы, когда я пытался сделать это в коде C # (в проекте mvc3).

  1. Каковы различия между EnvDTE80, EnvDTE90 and EnvDTE100, потому что я пытался сделать этот пример с EnvDTE100, но он не работает, потому что объект обрабатывает Solution4 не Solution2 и Solution4 не имеют одинакового поведения.
  2. Как создать проект без использования пути по умолчанию, но с нужной мне папкой

ОБНОВЛЕНИЕ

вот код, который работает, если я использовал dll под названием EnvDTE80

  System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0");
  Object obj = System.Activator.CreateInstance(type, true);
  EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)obj;
  Solution2 _solution = (Solution2)dte.Solution;
  string projectTemplatePath = @"C:\Documents and Settings\jmachado\Escritorio";
  projectTemplatePath =_solution.GetProjectTemplate("",""); <-- looking for some overload to create project based in a specific folder an not from '<drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language.'

Но если я использовал EnvDTE100

  System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
  Object obj = System.Activator.CreateInstance(type, true);
  EnvDTE100.DTE2 dte = (EnvDTE100.DTE2)obj;
  Solution4 _solution = (Solution4)dte.Solution;
  string projectTemplatePath = @"C:\Documents and Settings\jmachado\Escritorio";
  projectTemplatePath =_solution.GetProjectTemplate("",""); <-- looking for some overload to create project based in a specific folder an not from '<drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Language.'

и скажите, что DTE2 не выходит из пространства имен EnvDTE100

1 Ответ

7 голосов
/ 11 января 2012

EnvDTE80, EnvDTE90 и EnvDTE100 - библиотеки типов DTE для VS 8.0 (2005), 9.0 (2008) и 10.0 (2010), соответственно.

Начиная с VS2010, имеется только два интерфейса корневых объектов DTE.DTE2 является последним.Итак, чтобы получить объект DTE для VS 2010, вы должны:

System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
Object obj = System.Activator.CreateInstance(type, true);
EnvDTE8.DTE2 dte = (EnvDTE100.DTE2)obj;

Обратите внимание, что ProgID для "10.0", но тип переменной по-прежнему EnvDTE8.DTE2.

Остальное должноработать оттуда.Также обратите внимание, что вы всегда можете привести Solution4 к Solution2, если вам это нужно (но GetProjectTemplate должен быть доступен непосредственно на Solution4).

...