Welcome to my blog

Here, I talk about my projects, .Net, and work.

15 Oct, 17

Générer tous les T4 Text Templates à la compilation


Hello World à tous !

Si comme moi vous utilisez du T4 Text Templates (fichiers .TT) dans vos projets avec Visual Studio et avez besoin de les générer avant chaque compilation, cet article est pour vous.

Depuis un certain temps, je me suis mis en tête d’avoir une numéro de version d’Assembly qui correspond à « Année.Mois.Jour.NombreDeBuildDansLaJournée ». Pour générer celà, rien de tel qu’un peu de méta-programmation avec du T4. Et comme je suis un fénéant, j’ai envie de faire en sorte de générer automatiquement tous mes fichiers T4 avant la compilation.
Ces dernières années, j’ai utilisé plusieurs façons de faire dans divers projets sous Visual Studio 2013, 2015 et maintenant 2017, souvent bancales. Entre les lignes de commandes en Pre-Build, les chemins qui n’existent plus d’une version à une autre de Visual Studio voir d’une machine à une autre, et bien j’étais gâté.

Read more
18 Oct, 16

Récupérer la vraie résolution d’un écran en C# ou comment Windows m’a écarté l’Anus


Hello World à tous !

Tu essayes de récupérer la résolution d’écran de tous tes moniteurs en C# et tu t’arraches les cheveux ? Tu es au bon endroit.

Je viens de passer l’après-midi à tenter de récupérer la résolution de tous mes écrans (internes + externes) sans que la taille du texte, apps et autre de Windows, que l’écran principal ou que la rotation d’un écran externe ne vienne me faire démouler un cake.

Le scénario

Dans le cadre d’un projet personnel, je dois développer une application WPF. Je souhaite faire en sorte qu’une même fenêtre de cette application soit ouverte sur chaque écran du PC et prenne une certaine dimension en fonction de la résolution de l’écran ciblé. Il ne me faut donc pas juste récupérer la résolution de l’écran principal (primaire) ou la résolution global (somme de tous les écrans), mais bien récupérer la résolution de tous les écrans connectés au PC.

Pour cela, rien de plus simple, il me suffit d’utiliser l’API suivante :

Oui mais ! Ceux qui ont fait cette API (et je pense que j’irais leur dire bonjour la prochaine fois que je retourne à Redmond) ont dû trouver que c’était trop facile.

Read more
3 Mar, 16

[MSIL] Désassembler, modifier, recompiler un Assembly .Net / WinRT


Hello World à tous !

Voici quelques mois que je n’ai pas écrit d’article. Aujourd’hui nous allons voir comment désassembler, modifier et recompiler un EXE ou une DLL précédemment compilé en .Net ou en WinRT.

Avant toute chose, une petite mise en garde au cas où : désassembler un programme peut s’avérer être illégal selon la licence associée au composant que vous allez exploiter.

Voilà, je me sens beaucoup mieux. 🙂
Qu’allons-nous voir plus précisément ?

ILDASM et ILASM

Je m’attaque à un cas de figure particulier. Généralement nous désassemblons un Assembly grâce à des outils comme JustDecompile ou .Net Reflector. Ces deux outils ont l’avantage de nous afficher du code C# compréhensible de tous, et même de l’exporter sous forme de projet pour Visual Studio. Seulement quelquefois, ça ne fonctionne pas très bien. Et c’est pire quand l’Assembly a été obfusqué auparavant (là en général c’est un désassemblage totalement illégal…) car ça ne compile même pas et il faudrait des jours voir des semaines pour obtenir un code qui compile correctement sans avoir changé le comportement du programme.

Du coup, la solution que je propose est de mettre la main dans le MSIL (Microsoft Intermediate Language). C’est un langage intermédiaire généré lors de la compilation et qui est converti par la suite en code natif. L’avantage est que même obfusqué, il est compilable.

Read more
26 Avr, 15

Simulateur d’algorithme cross-plateform en C#


Hello World !

Dans le cadre de mes travaux actuels, hier, j’ai rapidement développé un prototype permettant de simuler un algorithme en C#, le tout cross-plateforme. L’architecture du projet ressemble un petit peu à ce que j’ai déjà fait dans SoftwareZator (Action, ActionTools, CodeDom…etc pour ceux qui l’utilise).

Le Concept

Le concept est d’être capable de simuler et de déboguer un algorithme à l’exécution en utilisant du C#. Histoire d’avoir un challenge encore plus élevé, on veut que ça soit cross-plateforme.

Cela implique plusieurs choses :

– Il me sera impossible d’utiliser CodeDom ou Roslyn pour compiler et exécuter du code au runtime.

– Il me sera également impossible d’utiliser le Débogueur Windows car il est impossible d’y faire appel depuis une application WinRT par exemple.

– Ainsi, je vais donc créer ma propre architecture ressemblant à CodeDom, que je vais appeler « AlgorithmDom ».

– Et je vais créer un interpréteur qui va analyser l’AlgorithmDom et réaliser des actions en fonction de ça.

Read more
23 Avr, 15

Récupérer l’ID unique du CPU en C#


Hello World !

Quelle galère ! Durant le développement de PasswordZanager, j’ai eu besoin de récupérer l’ID unique du processeur.

Il y a peut-être d’autres solutions que la mienne, mais c’est le plus simple trouvé sans être obligé d’ajouter 36000 dépendances et DllImport.
Pour cela, on va ajouter la référence System.Management à notre projet et faire une requête WMI (Windows Management Instrumentation) avec la classe ManagementObjectSearcher :

Résultat :

cpuId

 

Voilà, pas plus compliqué en fait. 🙂