11

正如我的问题所说,我想创建一个基于模板的新项目,该模板已经创建了一个经过测试并且工作正常,但是当我尝试在 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

4

1 回答 1

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;

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

其余的应该从那里开始工作。另请注意, 如果需要,您可以随时Solution4转换为(但应该直接在 上可用)。Solution2GetProjectTemplateSolution4

于 2012-01-11T19:20:23.260 回答