web-dev-qa-db-fra.com

Alternative aux macros dans Visual Studio 2012

J'utilise beaucoup les macros pour les propriétés ViewModel dans XAML development. Je les utilise encore plus dans WCF pour générer les propriétés Message et DataContract.

À ma grande déception, les macros que j'ai construites ne seront pas utilisables dans Visual Studio 2012.

Un exemple de ce dont je parle, pour un ordinateur virtuel, je voudrais entrer dans quelque chose comme ça.

int id;
string name;

Sélectionnez les deux lignes, lancez une macro et terminez avec

private int _id;
private string _name;

public int Id
{
   get {return _id;}
   set
   {
      if(_id != value)
      {
        _id = value;
        RaisePropertyChanged("Id");
      }
}

public string Name
{
   if(_name != value)
   {
      _name = value;
      RaisePropertyChanged("Name");
   }
}

Je cherche des idées d'autres solutions pour perdre des macros.

51
kfrosty

L'alternative la plus simple aux macros est la création de compléments. Je sais, je sais, cela ne m'enthousiasmait pas non plus, mais c'est en fait étonnamment facile. Il comporte trois parties simples:

  1. Créez le projet de macro en passant par une interface utilisateur de l'assistant.
  2. Ecrivez votre code.
  3. Copiez les fichiers .addin et .dll de la macro dans votre répertoire Visual Studio Addins.

Prenons une simple macro que j'ai écrite pour afficher la page de démarrage après la fermeture d'une solution et la transformer en complément.

Créer le projet de macro

  • Exécutez VS 2012 et créez un nouveau projet.
  • Accédez à Modèles> Autres types de projets> Extensibilité et sélectionnez Complément Visual Studio.
  • Donnez-lui un nom, tel que ShowStartPage.
  • Cliquez sur OK. Cela ouvre l'Assistant Complément.
  • Parcourez l'assistant en choisissant:
    • Langage de programmation: nous utiliserons C #
    • Hôte d'application: VS 2012 devrait être sélectionné
    • Nom et description de votre complément
    • Sur la page des options du complément, cochez uniquement la deuxième option ("Je souhaite que mon complément se charge au démarrage de l'application hôte").
    • Passer au-delà de la boîte de dialogue À propos de la boîte de dialogue pour le moment, puis cliquez sur Terminer.

Vous avez maintenant un projet complémentaire. Voici ce que vous en faites:

Écrivez le code

Ouvrez le fichier Connect.cs. (Il est peut-être déjà ouvert. Certains éléments de "DTE" devraient vous paraître familiers.)

Ajoutez ce code au niveau de la classe:

SolutionEvents solutionEvents;

Ajoutez ce code à la méthode OnConnection, juste après la ligne _addInInstance = (AddIn)addInInst;:

solutionEvents = _applicationObject.Events.SolutionEvents;

solutionEvents.AfterClosing += () =>
{
    _applicationObject.ExecuteCommand("View.StartPage");
};

Appuyez sur le bouton "Exécuter" pour tester votre code. Une nouvelle instance de Visual Studio 2012 démarre, avec votre complément chargé. Maintenant, testez le complément et assurez-vous qu'il fonctionne. (Ouvrez une solution, puis fermez-la; la page de démarrage doit revenir lorsque vous le faites.)

Le déployer

Une fois que le complément fonctionne, pour l'utiliser régulièrement avec Visual Studio 2012, il vous suffit de déployer deux fichiers:

  • ShowStartPage.AddIn (à partir du répertoire de votre projet principal)
  • ShowStartPage.dll (à partir du répertoire de construction de votre projet; par exemple, bin\Debug ou bin\Release)

Placez ces deux fichiers dans votre répertoire de compléments VS 2012, probablement situé ici:

C:\Users\[your user name]\Documents\Visual Studio 2012\Addins

Quittez puis redémarrez Visual Studio. Votre complément devrait alors fonctionner. Vous devriez également le voir répertorié lorsque vous accédez à Outils> Gestionnaire de compléments.

Bien que cela soit un peu plus gênant que d’ouvrir l’éditeur de macros et d’y coller votre code de macros, cela présente l’avantage de pouvoir utiliser n’importe quel langage, au lieu d’être coincé avec l’éditeur un peu flou de la même manière que VB. versions antérieures de Visual Studio.

64
Ryan Lundy

Le Visual Commander extension (développé par moi) est une alternative aux macros dans Visual Studio 2012/2013/2015. Vous pouvez même réutiliser votre code de macros Visual Studio existant dans de nouvelles commandes VB.

12
Sergey Vlasov

Je vais m'en tenir à couper le texte en Notepad ++ et à y utiliser des macros, puis à les coller. Il est dommage que cette fonctionnalité ne soit plus dans Visual Studio 2012 ...

12
Joao Milasch

Il existe un complément, VSScript , pour Visual Studio qui remplace les fonctionnalités de macros manquantes. Bien qu'il n'utilise pas Visual Basic, mais le langage de script Lua , vous pouvez l'essayer.

Il existe un enregistreur, une fenêtre d’éditeur de code macro avec IntelliSense et un simple débogueur. Le complément prend également en charge les versions antérieures de Visual Studio. Par conséquent, si vous préférez le langage Lua plutôt que Visual Basic, vous pouvez l'utiliser à la place des macros Visual Studio originales.

5
Dominic.wig

J'étais très triste de voir les macros partir aussi. Vous pouvez vous rapprocher des substitutions à l'aide de la recherche par expression régulière et les remplacer dans Visual Studio 2012. Dans votre cas:

Trouver: 

(.*) (.*);

Remplacer par: 

private $1 _$2;\npublic $1 $2\n{\n  get {return _$2;}\n  set\n  {\n    if(_$2 = value;\n    RaisePropertyChanged("$2");\n  }\n}\n

Cela vous donnera tout sauf la casse des noms de propriétés pour lesquels les macros seraient meilleures. 

Cependant, l’un des avantages de l’approche des expressions régulières est que l’entrée n’est pas aussi simple (instructions DDL de tables de base de données, par exemple).

Voici quelques liens utiles provenant de MSDN: 

Substitutions dans les expressions régulières

Utilisation d'expressions régulières dans Visual Studio

3
Lee Richardson

J'utilise Notepad ++ avec des expressions régulières comme celle-ci:

Trouver: 

public (.\*) (.)(.*) \\{ get; set; \\}

Remplacer: 

private \1 \l(\2)\3; \r\n public \1 \2\3 \\{ get \\{ return \l(\2)\3; \\} \r\n set \\{ \l(\2)\3 = value; OnPropertyChanged\(para => this\.\2\3\); \\}\\}
2
TungTh

L'absence de macros dans Visual Studio 2012 me démoralisait. J'en ai quelques-unes que j'utilise littéralement tout le temps pour insérer des petits morceaux de texte standard avec une seule pression de touche. J'ai donc écrit un package d'extensibilité de scripts très simple, VSScripts , qui permet de manipuler la sélection en cours à partir d'un programme en ligne de commande.

Cela ne prétend pas être un remplacement complet englobant de l'ancien système de macros, et il ne fournit pas de macros de clavier, mais il permet de recréer de nombreux types de macros de manipulation de texte.

1
Tom Seddon

Découvrez http://devexpress.com/coderush

La fonctionnalité des modèles fait à peu près ce que vous voulez.

Il existe également une version gratuite "Express".

1
Kuffs

Voici ce que j'ai fait pour conserver mes fonctionnalités de macro ...

  1. Téléchargez et installez le Kit de développement logiciel (SDK) Visual Studio 2012 ici (il contient le modèle "Visual Studio Package")
  2. Nouveau projet -> Installed.Templates.Visual C # .Extensibility.Visual Studio Package

    Assistant page 1 de 7

    language = C#
    gen new key is fine, or use another if you have one
    

    assistant page 3 de 7

    check "menu command"
    

    Assistant page 7 de 7

    uncheck both integration and unit test project options
    

    Cliquez sur Terminer

  3. Dans le fichier .cs:

    using EnvDTE;
    using EnvDTE80;
    
    ...
    private void MenuItemCallback(object sender, EventArgs e)
    {
        MenuCommand cmd = sender as MenuCommand;
    
        // This should start to look like familiar macro code...
        EnvDTE80.DTE2 dte2 = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2;
        TextSelection selection = (TextSelection)dte2.ActiveDocument.Selection;
    
        dte2.UndoContext.Open("macro command replacement");
        selection.Text = "inserted from macro replacement";
        selection.NewLine(1);
        dte2.UndoContext.Close();
        ...
    
  4. Exécutez le projet. Une nouvelle instance de Visual Studio commencera avec le package chargé.
  5. Recherchez votre commande en tant que première entrée en haut du menu Outils. Cliquez dessus pour voir si cela fonctionne.
  6. Pour installer réellement, allez dans votre répertoire bin\debug (/ release) et double-cliquez sur le fichier .vsix.
  7. Il devrait être installé pour la prochaine fois que vous exécutez
  8. Allez au menu Outils -> Options ... -> environment.keyboard et mappez une frappe sur votre outil.

    Mapping theme : Visual C# 2005
    Command       : Tool.yourFunctionName (functions defined in the .vsct file)
    

Si vous voulez plus d'une commande, vous devrez ajouter des identifiants de menu dans les PkgCmdID.cs, des guides dans Guids.cs, des présentations dans le .vsct et une fonction dans le * package.cs Fonction d'initialisation) pour chacun. Tout peut être fait dans le même projet.

J'ai utilisé ce projet pour créer plusieurs nouveaux «outils» avec mon ancien code de macro, puis mappé mes clés sur eux. C’est beaucoup plus de travail (et de maux de tête) au début, mais n’a pas le temps de latence des macros.

Il existe probablement un moyen de le faire sans que cela prenne les menus des outils. J'ai commencé à regarder ça hier soir et finalement je l'ai fait fonctionner, donc j'en ai fini pour le moment (au moins jusqu'à ce que Microsoft décide de laisser tomber ça aussi).

1
DanW

Personnellement, j'aime bien celui-ci - Visual Commander extension vous permet d'automatiser des tâches répétitives dans Visual Studio 

0
alexanoid