11

Je souhaite ajouter une fonctionnalité lorsque l'utilisateur crée une solution \ projet dans Visual Studio 2010 \ 2012. c'est-à-dire que j'ai besoin d'exécuter du code C# lorsqu'un nouveau projet est créé.Événement sur la création d'un projet Visual Studio

J'ai beaucoup googlé mais je n'ai trouvé aucun événement qui est déclenché après la création du projet.
Y a-t-il un moyen de le faire?

+0

** Je dois exécuter du code C# ** ce que tu veux dire par là? Pouvez-vous s'il vous plaît expliquer dans les détails. Voulez-vous dire que vous voulez exécuter C# cmd/vous voulez insérer le code prédéfini C# dans le projet/vous voulez déclencher un C# exe ou quoi? –

+0

J'ai le code C# qui utilise EnvDTE etc., et je veux ajouter ceci comme fonction ou autre chose qui sera appelée quand le projet est créé. – user3114639

+0

Je ne suis pas sûr, mais essayez si cela peut vous aider. [cliquez sur ce lien] (http://www.codeproject.com/Articles/36219/Exploring-EnvDTE) –

Répondre

1

Après quelques recherches et grâce à l'article mentionné par @ Joe Steele, je « ai réussi à brancher l'événement CommandEvents.AfterExecute, responsable de la création du projet:

DTE application = this.GetService(typeof(SDTE)) as DTE; 
string guidVSStd97 = "{5efc7975-14bc-11cf-9b2b-00aa00573819}".ToUpper(); 
int cmdidNewProject = 216; 

this.createCmd = application.Events.CommandEvents[guidVSStd97, cmdidNewProject]; 
this.createCmd.AfterExecute += this.command_AfterExecute; 

Et voici comment le délégué ressemble:

void command_AfterExecute(string Guid, int ID, object CustomIn, object CustomOut) 
{ 
    // place your code here 
} 

Remarques: Probablement la partie la plus difficile

  1. était de trouver le bon guid et commandId, mais this article était d'aide.

  2. Parfois, pendant le débogage, l'événement ne se déclenche pas du tout, ce qui m'a fait déconcerté, mais heureusement je me suis tombé sur ce morceau de conseil:

L'objet SolutionEvents peut aller de portée et d'être recueilli avant que la solution est fermée. Pour conserver une référence à cet objet, déclarez une variable privée dans la classe dans laquelle vous implémentez les gestionnaires d'événements de solution.Source

Ainsi l'introduction de la variable privée résolu la question:

private CommandEvents createCmd; 
0

Créez un projet de modèle contenant votre code. Ainsi, les autres utilisateurs peuvent utiliser votre modèle à la place des modèles VS par défaut.

+0

Je l'ai déjà essayé, mais le projet de template VS2010 C++ ne supporte que du code javascript, et je veux faire du code C#. – user3114639

0

Si vous tentez d'intercepter une création de projet interactive (c'est-à-dire que l'utilisateur a sélectionné "Nouveau -> Projet" dans le menu), vous devez simplement pouvoir accrocher l'événement de menu. Toutefois, Visual Studio ne fournit pas ces événements directement.

This post from Microsoft support talks about getting around that. Oui - l'article est très vieux, mais je crois qu'il est toujours exact. S'il vous plait corrigez moi si je me trompe. Il a été un temps long depuis que j'ai créé une extension VS. Le nom de l'événement est probablement quelque chose comme "New.Project". Vous devrez comprendre le GUID et l'ID. Si vous n'avez pas créé d'extension Visual Studio auparavant, this is a good place to start.

Si vous essayez d'obtenir une création de projet non interactive, il y a beaucoup plus d'endroits à accrocher. Quelqu'un de plus sage que moi devra intervenir.

0

Le problème est que les événements ne sont déclenchés qu'à l'exécution. Et puisque la création d'un projet ne se produit pas en cours d'exécution, il n'y a aucun événement pour cela.

La seule façon que je peux penser est de vérifier la taille du dossier contenant tous les projets et voir si elle a changé, puis le feu de votre code C#

+0

De cette façon peut fonctionner théorique, mais il y a 3 problèmes: Premièrement, je n'ai que VS Add-In, je ne peux pas vérifier la taille du dossier de l'utilisateur tout le temps (Quel événement puis-je effectuer cela?). Le second - l'utilisateur peut ajouter son projet à n'importe quel endroit de son ordinateur, donc je n'ai pas de dossier spécifique à vérifier. Le troisième, lorsque je détecte un changement de taille, comment puis-je savoir quel projet a été ajouté? et peut-être que l'utilisateur a ajouté un autre fichier? – user3114639

Questions connexes