以编程方式创建Visual Studio项目

时间:2012-01-09 15:10:08

标签: c# asp.net visual-studio-2010 project-template

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

  1. EnvDTE80, EnvDTE90 and EnvDTE100之间的区别是什么,因为我尝试this exampleEnvDTE100但它不起作用,因为对象处理的是Solution4而不是Solution2 }和Solution4没有相同的行为。
  2. 如何在不使用默认路径的情况下创建项目,而是使用我需要的特定文件夹
  3. 更新

    如果我使用名为EnvDTE80

    的dll,这里的代码可以正常工作
      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 个答案:

答案 0 :(得分:7)

EnvDTE80,EnvDTE90和EnvDTE100分别是VS 8.0(2005),9.0(2008)和10.0(2010)的DTE类型库。

只有两个DTE根对象接口,从VS2010开始 - DTE2是最新的。因此,要获取VS 2010的DTE对象,请执行以下操作:

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应该直接可用。