Sortie de Visual Studio 2013 Update 3

Ca y est, l’update 3 de Visual Studio 2013 est disponible en Release Candidate (RC) à l’adresse suivante : http://www.microsoft.com/fr-fr/download/details.aspx?id=43398

Celle-ci sera disponible en version RTM (Release To Manufacturer) à la fin de l’été (je n’arrive pas à retrouver l’info exacte que j’ai lu sur un blog récemment …)

Cette version apporte comme d’habitude des corrections ainsi que des évolutions sur les outils suivants :

  • Application insights : Cette application de monitoring de site Web, et d’applications Windows 8 ou Windows Phone est maintenant inclus dans Visual Studio 2013
  • Visual Studio Graphics Analyzer : Comme son nom l’indique, cet outil permet d’analyser les performances graphiques d’une application en DirectX. Plus d’infos, ici
  • .Net Memory Analysis : Il est maintenant possible d’utiliser directement les fonctions “Atteindre la définition” (F12) et “Rechercher toutes les références” (Shift-F12) depuis l’outil d’analyse de mémoire fourni dans Visual Studio. Plus d’infos, ici.
  • Utilisation de la CPU et de la mémoire : Il est maintenant possible de naviguer directement dans le code depuis l’arborescence des appels. Le support pour les applications Win32 et WPF a aussi été amélioré (avec notamment la possibilité de forcer le déclenchement du Garbage Collector (Ramasse-miettes pour les anglophobes Sourire). Plus d’infos, ici et ici.
  • CodeLens (ou affichage tête haute) uniquement disponible dans la version Ultimate : L’outil permet maintenant de montrer les auteurs ainsi que les changements dans un référentiel Git.

Rechercher / remplacer avec des expressions régulières dans Visual Studio

Dans le cadre d’un de mes projets, j’ai récemment eu à remplacer dans tout un projet décompilé (généré par ILSpy sur du Compact Framework 3.5 …) le type de code suivant :

[sourcecode language= »csharp » padlinenumbers= »true » htmlscript= »false » toolbar= »true »]
int i = 17;
List<string> l = new List<string>();
l.get_Item(12) = "une chaine";
l.get_Item(i) = "une autre chaine";
[/sourcecode]

par celui-ci :

[sourcecode language= »csharp »]
int i = 17;
List<string> l = new List<string>();
l[12] = "une chaine";
l[i] = "une autre chaine";
[/sourcecode]

Aparté : J’en suis arrivé à ce code, car Il semble qu’ILSpy ne gère pas très bien le code compilé pour le Compact Framework, d’où la récupération de ces get_Item au lieu de l’indexeur classique. J’ai eu le même problème avec les propriétés qui étaient toutes de la forme .get_NomPropriete() ou .set_NomPropriete().

Je me suis naturellement tourné vers le remplacement dans Visual Studio par des expressions régulières (Je n’aborderai pas ici leur utilisation, pour plus d’informations je vous invite à consulter le site du zéro : http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2 ou ce site (en anglais) http://www.regular-expressions.info/)

Il se trouve en fait que le comportement des expressions régulières a changé dans Visual Studio 2012 comme décrit succinctement dans la MSDN :

Pour plus d’informations sur les expressions régulières utilisées dans les modèles de remplacement, consultez Substitutions dans les expressions régulières.  Pour utiliser un groupe de captures numérotées, la syntaxe est $1 pour spécifier le groupe numéroté et (x) pour spécifier le groupe en question. Par exemple, l’expression régulière groupée (d)([a-z]) recherche quatre correspondances dans la chaîne suivante : 1a 2b 3c 4d. La chaîne de remplacement z$1 convertit cette chaîne en z1 z2 z3 z4> La syntaxe équivalente dans Visual Studio 2010 est {:z}([a-z]) pour l’expression régulière groupée et z1 pour la chaîne de remplacement.

L’expression régulière “officielle” pour effectuer une rechercher est la suivante : .get_Item((w+))((w+) représente le groupe à conserver et à réinsérer.

 Sous Visual Studio 2012 et supérieur, le remplacement se fait de la manière suivante :

VS2012regexp

  • $1 correspond au 1er groupe de l’expression régulière (dans notre exemple : “12” puis “i”)
  • image représentant la recherche par expressions régulières

Sous Visual Studio 2008 ou 2010, le mécanisme est légèrement différent :

image

  • L’expression régulière utilisée est : .get_Item({:a+})
    • “:a” correspondà un caractère alphanumérique
    • “{}” la définition d’un groupe
  • La récupération du groupe se fait par la syntaxe 1