2012-01-09 5 views
10

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

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

UPDATE

вот код, который работает, если я использовал длл называется 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

+0

Похоже, вы хотите связать себя с виртуальным каталогом, а не копировать весь свой код в каждый новый проект, вы можете использовать один источник, так что вы можете сразу исправить все ошибки (вместо того, чтобы исправлять все проекты). http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis/ – ThePower

+1

Не могли бы вы поделиться примером кода того, что вы на самом деле пытаетесь достичь, чтобы уточнить ваш вопрос? –

+0

@Joachim Isaksson уверен, дайте две минуты, чтобы задать вопрос – Jorge

ответ

7

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

Существует только два интерфейса объектных интерфейсов DTE, в то время как VS2010 - 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).

+0

Привет и спасибо, что спросили, теперь оставаясь моей второй проблемой, как я могу создать проект с определенным путем, отличающимся от того, что визуальная студия была по умолчанию? – Jorge

+0

Я не совсем понимаю просьбу. Если у вас есть собственный собственный шаблон проекта, который вы не копировали в папку шаблонов VS, тогда не используйте 'GetProjectTemplate', а просто передайте полный путь к шаблону непосредственно в' AddFromTemplate'. –

+0

есть VS2015 эквивалент, или мы просто используем DTE100? – tofutim

Смежные вопросы