2012-01-09 19 views
10

Come la mia domanda dice che voglio creare un nuovo progetto basato su un modello che ha già creato un test e funziona bene, ma ho due problemi quando ho provato a farlo in codice C# (in un progetto mvc3).Creare un progetto Visual Studio a livello di programmazione

  1. Quali sono le differenze tra EnvDTE80, EnvDTE90 and EnvDTE100, perché ho cercato di fare con this exampleEnvDTE100 ma non funziona perché gestire l'oggetto si tratta di Solution4 non Solution2 e Solution4 non avere lo stesso comportamento.
  2. Come si crea il progetto senza utilizzare il percorso predefinito, ma una cartella specifica di cui ho bisogno

UPDATE

Ecco il codice che funziona se ho usato la dll chiama 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.' 

Ma se ho usato il 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.' 

e Dire di che DTE2 non esce di nello spazio dei nomi di EnvDTE100

+0

Sembra che tu voglia essere coinvolto in una directory virtuale, invece di copiare tutto il tuo codice in ogni nuovo progetto, puoi usare un'unica fonte, così puoi fare tutte le correzioni di bug contemporaneamente (piuttosto che dover risolvere tutto progetti). http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis/ – ThePower

+1

Puoi condividere qualche esempio di codice di ciò che stai effettivamente cercando di ottenere per chiarire la tua domanda? –

+0

@Joachim Isaksson sicuro, dai due minuti per aggiornare la domanda – Jorge

risposta

7

EnvDTE80, EnvDTE90 e EnvDTE100 sono DTE tipo librerie per VS 8.0 (2005), 9,0 (2008) e 10,0 (2010), corrispondentemente.

Esistono solo due interfacce di oggetti radice DTE, dal momento che VS2010 - DTE2 è l'ultima. Quindi, per ottenere l'oggetto DTE per VS 2010, si fa:

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

noti che ProgID è per "10.0", ma tipo di variabile è ancora EnvDTE8.DTE2.

Il resto dovrebbe funzionare da lì. Nota anche che puoi sempre trasmettere Solution4 a Solution2 se necessario (ma lo GetProjectTemplate dovrebbe essere disponibile direttamente su Solution4).

+0

Ciao e grazie per avermelo chiesto, ora rimango il mio secondo problema, come posso creare il progetto con un percorso specifico diverso da quello visivo che lo studio ha di default ?? – Jorge

+0

Non capisco la richiesta. Se hai un tuo modello di progetto personalizzato che non hai copiato nella cartella dei modelli VS, non usare 'GetProjectTemplate', ma semplicemente passa il percorso completo al tuo template direttamente a' AddFromTemplate'. –

+0

esiste un equivalente VS2015 oppure utilizziamo semplicemente DTE100? – tofutim

Problemi correlati