以编程方式创建Visual Studio项目

Jor*_*rge 11 c# asp.net visual-studio-2010 project-template

正如我的问题所说,我想创建一个基于模板的新项目,该模板已经创建了一个经过测试并且工作正常,但是当我尝试用C#代码(在mvc3项目中)时,我有两个问题.

  1. 这是之间的区别EnvDTE80, EnvDTE90 and EnvDTE100,因为我试图做 这个例子EnvDTE100,但它不工作,因为对象句柄它Solution4Solution2Solution4不具有相同的行为.
  2. 如何在不使用默认路径的情况下创建项目,而是使用我需要的特定文件夹

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.'
Run Code Online (Sandbox Code Playgroud)

但如果我使用了 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.'
Run Code Online (Sandbox Code Playgroud)

并且说是DTE2没有在命名空间中退出 EnvDTE100

Pav*_*aev 7

相应地,EnvDTE80,EnvDTE90和EnvDTE100是VS 8.0(2005),9.0(2008)和10.0(2010)的DTE类型库.

从VS2010开始,只有两个DTE根对象接口--DTE2是最新的.因此,要获得VS 2010的DTE对象,您可以:

System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
Object obj = System.Activator.CreateInstance(type, true);
EnvDTE80.DTE2 dte = (EnvDTE100.DTE2)obj;
Run Code Online (Sandbox Code Playgroud)

请注意,ProgID用于"10.0",但变量类型仍然是EnvDTE80.DTE2.

其余的应该在那里工作.另请注意, 如果需要,您可以随时Solution4转换Solution2(但GetProjectTemplate应该可以直接使用Solution4).