2012-01-09 21 views
10

Como mi pregunta dice que quiero crear un nuevo proyecto basado en una plantilla que ya creó una prueba y funciona bien, pero tengo dos problemas cuando intenté hacerlo en código C# (en proyecto mvc3).Crear un proyecto de Visual Studio programáticamente

  1. ¿Cuáles son las diferencias entre EnvDTE80, EnvDTE90 and EnvDTE100 porque he intentado hacer con this exampleEnvDTE100 pero no funciona porque el objeto es manejarlo Solution4 no Solution2 y Solution4 no tiene el mismo comportamiento.
  2. ¿Cómo puedo crear el proyecto sin utilizar la ruta por defecto, sino una carpeta específica que necesito

ACTUALIZACIÓN

aquí está el código que funciona si usaba la DLL llama 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.' 

Pero si he utilizado el 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.' 

y Say de que DTE2 no sale de en el espacio de nombres de EnvDTE100

+0

Parece que desea involucrarse con un directorio virtual, en lugar de copiar todo su código en cada nuevo proyecto puede usar una fuente, por lo que puede corregir todas las fallas de una vez (en lugar de tener que solucionarlo proyectos). http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis/ – ThePower

+1

¿Podría compartir algún código de ejemplo de lo que realmente está tratando de lograr para aclarar ¿tu pregunta? –

+0

@Joachim Isaksson seguro, conceda dos minutos para actualizar la pregunta – Jorge

Respuesta

7

EnvDTE80, EnvDTE90 y EnvDTE100 son bibliotecas de tipo DTE para VS 8.0 (2005), 9.0 (2008) y 10.0 (2010), correspondientemente.

Existen solo dos interfaces de objetos raíz DTE, a partir de VS2010 - DTE2 es la última. Por lo tanto, para obtener el objeto DTE para VS 2010, que hace:

System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0"); 
Object obj = System.Activator.CreateInstance(type, true); 
EnvDTE8.DTE2 dte = (EnvDTE100.DTE2)obj; 

Tenga en cuenta que es ProgID para "10,0", pero el tipo variable es todavía EnvDTE8.DTE2.

El resto debería funcionar desde allí. Tenga en cuenta también que siempre puede emitir Solution4 a Solution2 si lo necesita (pero GetProjectTemplate debería estar disponible directamente en Solution4).

+0

Hola y gracias por preguntar, ahora sigue siendo mi segundo problema, ¿cómo puedo crear el proyecto con una ruta específica diferente que el estudio visual tiene por defecto? – Jorge

+0

No entiendo muy bien la solicitud. Si tiene una plantilla de proyecto personalizada que no copió en la carpeta de plantilla VS, entonces no use 'GetProjectTemplate', sino que simplemente pase la ruta completa a su plantilla directamente a' AddFromTemplate'. –

+0

¿hay un equivalente VS2015 o solo usamos DTE100? – tofutim

Cuestiones relacionadas