Создать проект Visual Studio программно
Как говорится в моем вопросе, я хочу создать новый проект, основанный на шаблоне, который уже создал протестированный и отлично работает, но у меня две проблемы, когда я пытался сделать это в коде С# (в проекте mvc3).
- Каковы различия между
EnvDTE80, EnvDTE90 and EnvDTE100
, потому что я пытался сделать этот пример с помощью EnvDTE100
, но он не работает, потому что объект обрабатывать его Solution4
not Solution2
и Solution4
не имеет такого же поведения.
- Как я могу создать проект без использования пути по умолчанию, но для конкретной папки, которая мне нужна
UPDATE
здесь код, который работает, если я использовал 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
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);
EnvDTE80.DTE2 dte = (EnvDTE100.DTE2)obj;
Обратите внимание, что ProgID для "10.0", но тип переменной по-прежнему EnvDTE80.DTE2
.
Остальные должны работать оттуда. Также обратите внимание, что вы всегда можете привести Solution4
к Solution2
, если вам это нужно (но GetProjectTemplate
должен быть доступен непосредственно на Solution4
).