Jan 06

Dans la dernière version de ASP.NET, une fonctionnalité vraiment pratique est apparue : la transformation XML du fichier web.config.
C’est une fonctionnalité toute bête et pourtant très pratique : elle permet de modifier le fichier de configuration en fonction de l’environnement cible utilisé pour la compilation / publication du projet.
La mise en œuvre est simple, il suffit d’ajouter au projet des fichiers web.[environnement_cible].config  et d’inclure dans ces fichiers les instructions de modification (ajout de clés, changements de valeurs, suppression de clés).

Malheureusement, cette fonctionnalité n’est pas disponible pour les applications lourdes (WinForm, WPF) et leur App.Config. Enfin, pas nativement.

En effet, la structure du fichier est proche et tout ce qui est fait, c’est simplement modifier des éléments d’une structure XML, rien d’extraordinaire et il n’y a donc pas de raison que ce ne soit pas possible. Donc même si l’interface de la Visual Studio ne fournit pas ces fonctionnalités, il existe forcément un moyen !

Bon apparemment, il en existe même plusieurs car dans mes recherches j’ai croisé plusieurs plugins Visual Studio ou billets de blog expliquant l’une ou l’autre technique. J’en ai essayé plusieurs sans succès (certaines ne fonctionnent pas avec tous les modes de publication, notamment ClickOnce).

Voici une solution que j’utilise quotidiennement sur un projet donc qui semble fonctionner, même avec ClickOnce. La solution est fournie par le billet de ExceptionalCode dont je me suis fortement inspiré pour cet article.

Ajouter le support des transformations XML dans un projet non Web

Toute la magie réside dans le projet MSBuild (AppConfig.Transformation.targets / Copie locale du fichier au 10/01/2012) créé par João Angelo de ExceptionalCode.

MàJ : Comme expliqué ici, ce fichier ne fonctionne pas avec la Visual Studio 2010 SP1, pour cette version, il faut utiliser un autre fichier, corrigé par le même auteur : AppConfig.Transformation.targets / Copie locale du fichier au 03/01/2013).

Il faut donc ajouter ce fichier au projet, pour cela il faut éditer le fichier du projet de démarrage:

  • Faire un clic-droit sur le projet en question et choisir Décharger le projet (Unload Project)
  • Toujours sur le même projet, faire à nouveau un clic-droit et choisir Editer [nom du projet]. Cette action va ouvrir le fichier XML du projet et permettre son édition.
  • Effectuer les modifications suivantes :
    Avant modification :

        ...
        <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
        <Target Name="BeforeBuild">
        </Target>
        <Target Name="AfterBuild";>
        </Target>
    </Project>

    Après modification :

        ...
        <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
        <Import Project="..\Librairies\AppConfig.Transformation.targets" />
        <Target Name="BeforeBuild">
        </Target>
        <Target Name="AfterBuild">
        </Target>
    </Project>

    Ici je considère que le fichier AppConfig.Transformation.targets se trouve dans un répertoire Librairies à la racine de la solution, dans le répertoire parent du projet.

Et voilà, il ne reste plus qu’à créer un fichier de configuration pour chaque environnement cible, en respectant le format de nommage App.[environnement_cible].config comme ici :

Par contre, en suivant la procédure jusqu’ici, par défaut la Visual Studio n’affiche pas les différents fichiers App.[env].config de manière hiérarchique comme c’est le cas sur la capture d’écran ci-dessus.

Pour cela, il faut :

  • Repasser en mode édition XML du fichier du projet (comme déjà fait dans la section précédente)
  • Repérer les déclarations pour les fichiers App.[env].config, par exemple :
    <None Include="App.Debug.config" />
  • Pour chaque fichier de configuration (sauf App.config bien sûr), il faut ajouter un sous-élément indiquant que ce fichier est dépendant de App.config
    <None Include="App.Debug.config">
        <DependentUpon>App.config</DependentUpon>
    </None>

Lorsque le projet sera rechargé, tous les fichiers de configuration seront bien affichés de manière hiérarchique sous App.config.

Les instructions de modification à mettre dans ces fichiers sont détaillées ici et seront peut-être l’objet d’un autre billet.

Oct 11

Logo Visual StudioRégulièrement je tombe sur un problème assez désagréable avec le débugger de la Visual Studio 2008. L’IDE s’arrête sur un point d’arrêt, jusqu’ici tout va bien. Mais si j’essaie d’avancer pas-à-pas dans le code, cela ne marche pas… des fois… Il semblerait que de temps à autre au lieu de passer à l’instruction suivante, le processus continue l’exécution du programme, comme si j’avais utilisé la touche F5 au lieu de F10.

La « solution » que j’ai utilisé jusque là, c’est de mettre des points d’arrêt partout, car même si l’exécution reprend, elle s’arrête toujours au point d’arrêt suivant (enfin… presque).
Un peu exaspéré par ce soucis lors d’une session de débogage particulièrement difficile, j’ai fais quelques recherches.

Et je suis tombé sur cette question, sur Stack Overflow.
Il semblerait que le problème survienne lorsque l’application utilise plusieurs processus ou threads.

La bonne nouvelle, c’est qu’il s’agit un bug connu de la Visual Studio et qu’il existe une rustine.

Juil 14

Logo Visual StudioIl est assez fréquent de créer des projets juste pour pouvoir tester un bout de code ou vérifier que tel code compile.

Jusqu’ici personnellement j’avais un projet sur mon ordinateur qui n’était destiné qu’à ça. Mais j’ai découvert une fonctionnalité pratique qui permet de créer un projet qui sera supprimé lorsque la Visual Studio sera fermée :

  • Tools > Options > Projects and Solutions
  • Décocher Save new projects when created

That’s it !

Juil 07

J’ai déjà parlé il y a quelques de temps de comment intégrer automatiquement la révision SVN dans le numéro de version de l’application.

Néanmoins, avec cette modification, il est toujours nécessaire de modifier les numéros de version manuellement à chaque livraison.
Il existe plusieurs outils qui permettent d’automatiser ça, notamment Build Version Increment qui est un Add-in pour Visual Studio 2005/2008/2010. Et il y a un même un plugin (oui oui un plugin d’un add-in) qui permet d’intégrer la révision SVN (entre autres) : Happy Turtle.

Pour le moment je n’ai fais que jeter un oeil, mais je pense que cela peut valoir le coup de le tester.

Juil 04

Sara Ford est une spécialiste du sujet et liste régulièrement pas mal de petites astuces, plus ou moins connues, qui permettent de faciliter l’utilisation de la Visual Studio 2010.

Elle s’est lancé un petit défi lors d’une de ses présentations : faire la démonstration de 101 astuces en 55 minutes. Il est d’ailleurs possible de voir la vidéo. Attention, cela va très vite !

Comme elle est sympathique, elle donne un petit résumé de l’intégralité des astuces présentées (fichier docx en bas du billet) et en liste pas mal sur son blog.