2009-11-04 5 views
0

Nous avons un assistant Visual Studio écrit à l'aide de l'environnement DTE pour générer automatiquement du code, des modèles, etc., basé sur des bases de données personnalisées. À l'heure actuelle, il ouvre quelques boîtes de dialogue, recueille des informations, puis utilise la classe EnvDTE pour générer le code et le formater. Étant donné que les informations collectées à partir des boîtes de dialogue sont disponibles, existe-t-il un moyen d'appeler devenv et de lancer l'assistant pour générer automatiquement le code?Comment appeler un assistant Visual Studio personnalisé à partir de la ligne de commande?

Répondre

0

La réponse à cela était l'automatisation de studio visuel en utilisant l'interface DTE2. Par exemple, j'ai créé une nouvelle instance de Visual Studio avec

Type t = Type.GetTypeFromProgID("VisualStudio.DTE.9.0", true); 
object obj = System.Activator.CreateInstance(t, true); 
m_DTEInstance = obj as DTE2; 

Ensuite, vous pouvez faire des choses telles que la création d'une nouvelle solution:

Solution2 solution = (Solution2)m_DTEInstance.Solution; 
solution.Create(OutputDirectory, Namespace + ".sln"); 
0

Vous pouvez certainement exécuter Visual Studio à partir de la ligne de commande. Vous pouvez même lui faire exécuter une commande (devenv /Command ...), mais cela signifie toujours amorcer l'intégralité de Visual Studio. Il n'est guère adapté pour fonctionner en mode batch si c'est ce que vous voulez.

Ce que vous pouvez faire à la place est d'utiliser CodeDom pour la génération de code. Il ne se relaie pas sur EnvDTE ou toute autre chose de Visual Studio pour générer le code. Dans mon générateur de code, j'ai également commencé à utiliser Visual Studio Automation, mais quand il s'agissait de construire par lots, je devais le refaire en utilisant CodeDom à la place.

+0

je vais devoir regarder dans/option de commande. Bootstrapping l'ensemble de Visual Studio est très bien, je me soucie plus de l'automatisation du processus que de tout. Je voudrais idéalement que cela fasse partie de la construction elle-même (la construction produit du code qui est ensuite construit). Cela ne me dérangerait pas de le réécrire pour CodeDom mais j'ai seulement 2 jours alloués à ce projet, et la réécriture de cette quantité de code prendrait une semaine. – esac

+0

Mise à jour: a regardé toutes les options de ligne de commande, ne vois rien pour l'exécution d'un assistant, donc je devrais déplacer l'assistant entier vers une version en ligne de commande qui ne semble pas fonctionner avec EnvDTE. – esac

+0

Avec toute mon expérience de l'intégration VS - Paquets, CodeGeneration, Editeurs, etc. travailler avec Automation me donne toujours des brûlures d'estomac. Il est lourd instable et documenté même pire que le reste de celui-ci. IMHO réécrire dans CodeDom serait plus prévisible que le chemin que vous avez en tête. Mais bien sûr, tout dépend de la quantité de code de génération de code que vous devez couper – mfeingold

Questions connexes