Custom Tool et templates, visual studio 2010

30 03 2011

Bonjour,

Une petite note pour ceux qui voudraient définir dans leur template de projet visual studio un custom tool.

1 – Dans le cas d’un item template, il suffit d’ajouter dans le vstemplate <ProjectItem […]
CustomTool= »MyTool »

2 – Dans le cas d’un project template c’est un peu plus complexe, il faudra passer par un wizard de création de projet afin de définir la propriété « CustomTool » des projectitems.
foreach (EnvDTE.ProjectItem item in project.ProjectItems)
{
string filename = item.get_FileNames(0);
item.Properties.Item(« CustomTool »).Value = « MyTool »;
}

Je précise que cela fonctionne sous visual studio 2010, aucun test n’a été réalisé sur 2008 ou 2005

Publicités




C# raffinement de classes, méthodes d’extension

23 04 2010

Bonjour,

En ce moment à Montréal pour cours et stage, je suis un cours de langage objet avancé.

Dernièrement, on nous a introduit la notion de raffinement de classes et hiérarchie de module (grossièrement dit comme ça)

Le raffinement de classe en théorie c’est génial, mais en pratique, très très peu de langages l’on implémenté. Alors j’ai quand même fait un petit tour du côté de C# pour voir si un petit quelque chose avait été fait. Eh bien oui, certes à un niveau encore très basique, mais qui est déjà très intéressant.

Pour faire simple, le raffinement de classe :

On parle de raffinement de classes
– Ajout/redéfinition de propriétés
– Ajout de super-classes

Comme dit un peu plus tôt, C# n’a introduit qu’un léger, très léger aspect de ce concept. Car implémentation difficile dans les langages à typage statique.

Ce dernier permet l’ajout de méthode par extension d’une classe. Si vous avez connu le .Net avant l’apparition de Linq, vous vous êtes peut-être posé une question, d’où viennent ces nouvelles méthodes présentes dans mon objet String ??

Allez hop un exemple :

namespace MyFwk.StringExtensions

{

public static class StringExtensions

{

public static string RemoveDiacritics(this String inputString)

{

// TODO : Implement method

return stringBuilder.ToString();

}

}

}

Dans le projet :

using MyFwk.StringExtensions

namespace myProject.Toto{

public class Titi{

public Titi(string x){

string root = x;

x.RemoveDiacritics();

}

}

}

Et voilà, fini la création de classes pour compléter par une ou deux méthodes une classe existante du framework ou d’une dll managé (ou autre mais je n’ai pas testé).

Biensur, comme dis plut tôt, on est encore loin du vrai raffinement, car en plus, on ne peut override une méthode existante.

Aussi, le raffinement de classes doit être utilisé à bon escient, car c’est pas forcément plus facile à maintenir dans des processus de réutilisation.

Source du cours : Jean Privat, Uqam





WPF C# : Applications multilingues, WPF Localization Extension

1 03 2010

Voilà une problématique à laquelle j’ai du me frotter dernièrement.

J’ai fais quelques recherches afin de voir ce qui existait pour ce faire. Et je suis tomber sur une dll réalisée par un membre de Code Project, WPF Localization Extension.

Seule chose à déplorer, le fait qu’il n’y est qu’un projet démo pour se faire la main. Donc pour faire rapide je vais résumer en quelques points le fonctionnement de cette dll tel que je l’ai comprise

  • Référencer la dll (normale ^^)
  • Créer une ressource (resx) avec le nom de votre choix
  • Ajouter deux autres ressources, en mettant comme nom, nom_ressource1-fr par exemple. et -en pour anglais.

Ensuite, c’est la que toute la magie opère ^^. Dans vos fichier XAML, vous allez tout d’abords ajouter le namespace lex. xmlns:lex= »http://schemas.root-project.org/xaml/presentation &raquo;

Prenons l’exemple du label basique :

<Label Content= »{lex:LocText nomAssembly:nom_ressource1:lblMonLabel} » />

{lex: <== ok pour la compréhension

LocText <== Vous spécifiez que vous voulez « localiser » un texte, car oui, vous verrez que vous pouvez localiser pas mal de choses (images par exemple).

nomAssembly<== le nom de votre assembly, couramment le nom du projet.

nom_resource1 <== le nom de la première ressource que vous avez créé

lblMonLabel <== le nom de la clé du fichier ressource sous lequel vous retrouverez la valeur.

Jusque là, vous allez me dire, ça sert à rien, pas de localisation, et en effet, pas de localisation, on y vient.

Revenons à nos fichier de ressources, normalement, vous devriez retrouver dans le premier fichier de ressource : lblMonLabel avec comme valeur la chaîne de caractère. Maintenant, à la place de cette chaine de caractère, écrivez @lblMonLabel. et maintenant, dans vos autres fichiers de ressources localisables (fr et en), vous allez mettre en clé lblMonLabel et en valeur la chaine de caractère traduite. Comme ça, au moment de chercher la valeur dans le premier fichier de ressource, il sera redirigé vers le fichier localisé pour extraire la valeur.

Oui c’est bien beau, mais comme fait-on pour lui dire tel fichier de ressource?

LocalizeDictionary.Instance.Culture = CultureInfo.GetCultureInfo(« fr »); // fr car j’ai choisi de mettre juste -fr à la fin de mon fichier de ressource localisable.

Mais le plus fun est que dès que cette culture est modifiée, toute notre interface passe dans la langue souhaitée. Pas besoin de relancer l’application. C’est très bien géré.

Ça me semble bon pour cet article.

Voici le projet de test fournit par l’auteur : XamlLocalizationTest Source

Tchuss





C# .Net télécharger un fichier (avec avancement)

6 02 2010

Utilisation du web client : System.Net.WebClient

Souscrire à l’évènement DownloadProgressChanged , DownloadFileCompleted

Lancer le téléchargement en asynchrone ==> DownloadFileAsync(Uri,string)

Le DownloadProgressChangedEventArgs possède les propriétés : TotalBytesToReceive, ProgressPercentage, BytesReceived

Voilà

Source : http://www.dreamincode.net/forums/showtopic115491.htm





UML dans Visual Studio 2008

10 03 2008

UML? Unified Modeling Language, standard utilisé dans la modélisation de nos solutions utilisant l’objet.

Dans Visual Studio 2005, nous avions déjà le moyen de visualiser rapidement notre diagramme de classes à partir de notre solution. Désormais Visual Studio 2008 nous permet à partir de ce diagramme, de rajouter de nouvelles classes, enum, interfaces… ainsi que leurs propriétés, méthodes, évènements…UML1

On voit donc qu’il est désormais possible de créer sa classe rapidement, d’avoir une visualisation claire et correspondant à notre analyse. La zone résumé est très utile pour générer les commentaires rapidement, et une doc par la suite.

Pour établir une relation d’héritage entre deux classes:

Je tiens à préciser tout d’abord que je travaille avec la version Team System de Visual Studio 2008. La documentation MSDN nous précise qu’il faut sélectionner dans la boite à outil : « Héritage », puis de cliquer sur la classe, et de glisser vers la classe mère.

Hors cette technique ne fonctionne pas de chez moi quand la boite à outil est « volante » ou non ancrée à un panneau latéral. Mais nous avons trouvé une petite astuce:

-Maintenez la touche Ctrl enfoncée,

-Cliquez sur « Héritage » dans la boite à outil,

UML3

-Cliquez sur la classe dérivée et relâchez Ctrl,

-Déplacer votre curseur vers la boite à outil puis revenez vers votre diagramme de classes,

-Enfin cliquez sur la classe dérivée et déplacer votre curseur jusqu’à la classe mère et cliquez dessus.

La même méthode est à appliquer pour une relation d’association.

Cela fait un peu « bidouillage », mais c’est pour l’instant la méthode la plus rapide pour faire une relation d’héritage. Si vous trouvez une manière plus simple faites moi signe.

Pour finir, je tiens à signaler que cela ne marche que pour les langages managés. Pour Visual C++ , l’ajout par rapport à Vs2K5 est la possibilité de générer son diagramme de classes.





Microsoft AJAX, fini les nuits blanches sur du JavaScript

6 03 2008

Aujourd’hui nous verrons ce nouvel animal que nous apporte Microsoft.

Tout d’abords il faut savoir que ce nouvel outil n’est disponible qu’avec le framework 3.5.

Pour les utilisateurs de Visual Studio 2005, il faudra suivre cette démarche pour obtenir les fonctionnalités de Microsoft Ajax

Cet article aura juste pour but de vous présenter la rapidité que l’on a à dynamiser un site web en quelques clics(désoler pour les puristes).

On va se servir d’un site web basique, voir inutile mais qui servira d’exemple. Cette page web affiche un label et un bouton, tout cela dans un formulaire. Au load de la page, nous allons mettre le code correspondant :

MonLabel.Text = Date.Text (VB code)

Maintenant chargez votre solution, vous obtiendrais au chargement la date, et à chaque clic bouton, nous aurons la date actuelle avec rafraichissement de page.

Désormais nous allons nous servir des nouveaux composant de la boîte à outil :

Premièrement, au sommet de notre page, nous allons glisser un ScriptManager .

Deuxièmement, faites glisser le composant UpdatePanel dans votre page, l’emplacement n’a pas d’importance. Puis glisser votre label et votre bouton dans le composant UpdatePanel (la prise en main pour glisser les input n’est pas forcément aisé au premier essai ^^)

Eh voilà, chargez votre solution, appuyez sur votre bouton, aucun rafraichissement de page!

Voilà l’utilisation la plus simple de Microsoft Ajax.

Bien sur, il est possible d’exécuter des tâches plus complexes. Par exemple si vous possédez un site répertoriant des petites annonces par département. Vous avez créer une liste déroulante avec les départements, et un rechargement de page s’effectue pour l’affichage des annonces sur votre page. Dans ce cas, suivez exactement la même manipulation citée au-dessus, et vous n’aurez plus de rechargement de page.

De plus, il est possible de télécharger un module supplémentaire: Control Ajax Toolkit, basé sur une librairie open source qui délivre à l’utilisateur de nombreux contrôles Ajax, comme le drag & drop.

Voilà pour une présentation rapide de Microsoft Ajax.

Ressources :

http://www.asp.net/ajax/





Microsoft Office Live Workspace sort en version Beta.

6 03 2008

Pour concurencer l’application Google Docs de son grand rival, Microsoft vient se sortir en version beta Microsoft Office Live Workspace depuis le 5 mars.

MSOLW_screen

Cette application permet de centraliser tout ses documents Office et de pouvoir les partager sur Internet.

Attention: Il est nécessaire que les composants Office soient déjà préalablement installés sur votre machine. Si il n’y a pas de composants Office sur votre ordinateur, Microsoft Office Live Workspace n’est pas disponible. Et c’est dommage pour les utilisateurs d’OpenOffice.org, de plus en plus nombreux, ou pour les personnes qui n’ont pas MS Office sur leur ordinateur, qui ne pourront pas utiliser cet outil.