Aide-Mémoire C#/NET pour Dunod

C’est avec une joie immense que je vous annonce que mon Editeur Dunod me confie le projet de livre “Aide-Mémoire C#/NET” pour 2020. Parution en Septembre 2020.

Design de la couverture

Objectif : le langage C# et la plateforme Microsoft NET et .NET Core.

On va taquiner les 350 pages.

Table des matières / sommaire :

  • Préface de Eric Vernié, Microsoft FRANCE
  • Partie I : la plateforme NET
    • Le CLR : common language runtime et les assemblies
    • Le CTS : common type system
    • La BCL : base class library
  • Partie II : le langage C# et le framework NET
    • Les types
    • Les statements
    • Les classes
    • Les properties, les méthodes, les interfaces
    • Les generics
    • Les events et les delegates
    • Les types nullables
    • Les exceptions
    • La reflection et le chargement des assemblies
    • La serialisation
    • Async / await
    • LINQ
    • Le multithreading
    • Le Garbage Collector
    • Gestion du XML
    • Les I/O
    • L’accès aux données via ADO.NET
    • Web API et JSON
    • Cryptographie
    • Overview WinForms
    • Overview WPF
    • Overview ASP.NET MVC  / APS.NET Core
    • Overview Entity Framework / EF Core
    • Net Core
    • L’interop COM
    • L’interop avec C++, C++/CLI et C++/CLR
  • Partie III : Azure
    • Overview Azure
    • Overview Docker & Containers
  • Partie IV : les outils
    • Nuget
    • Visual Studio 2019
    • ILDAsm et divers
    • Roslyn

Si vous voulez être relecteur technique, envoyez moi un email pour que je vous donne accès à mon SharePoint sur christophep@cpixxi.com via une inscription de votre compte email Microsoft dans mon Active Directory en tant que Guest member.

Mon identité web (sites Web MVP Fr et en-US et blogs)

Pour présenter mes articles techniques (possibilité de télécharger les PDF), mes applications GitHub, mes bouquins et plus généralement mes activités communautaires de MVP, j’ai fait deux sites web:

Ils ont presque la même façace. Voici le site en français. On y trouve :

Retour sur 2019, articles et posts

Le post “Comment Devenir un Expert Microsoft” est certainement celui qui a eu le plus de succès. Je vous joint le dossier complet paru dans Programmez n°234 de Novembre 2019. Download sur : http://netazurerangers.com/Articles/Article234.pdf

Le post “Comment devenir un Expert Windows” a aussi eu sont petit succès. Il est prévu d’en faire un article pour Programmez. A suivre.

Le post “Code review le diable se cache dans le détail” aussi a des visiteurs.

Le poste “C++ unsafe et unsecure ?” a aussi eu de l’impact…

Liste de mes derniers articles dans le magazine Programmez :

  • N°234: Comment devenir un expert Microsoft ? – PDF
  • N°233: Windows Subsystem for Linux 2 (WSL 2) – PDF
  • N°232: Docker et Containers : Introduction et Concepts – PDF
  • N°231: Reverse Engineering et analyse de virus – PDF
  • N°230_1: XAML Islands : incorporez les contrôles XAML Windows 10 dans vos Apps WinForms et WPF – PDF
  • N°230_2: Introduction à ASP.Net Core 3.0 – PDF
  • N°229: C++ et Containers Docker sur Azure – PDF
  • N°228: LMDB : la base NoSQL la plus rapide du monde – PDF
  • N°227: Détection et reconnaissance faciale avec OpenCV4 en C++– PDF
  • N°226: Rootkit Partie II : Module Command & Control – PDF
  • N°225: Rookit key Logger – PDF
  • N°224: Space Invaders 1978 en C/C++ avec SFML – PDF
  • N°223: Windows Le Multithreading en C/C++ – PDF
  • N°222: Linux Le Multithreading en C++ – PDF
  • N°221: Au coeur d’un Service Windows NoSQL – PDF
  • N°220: Créer un service Windows – PDF
  • N°218: Migrer son code C/C++ en 64 bits – PDF
  • N°217: Les Tests en C++ – PDF
  • N°216: La Programmation Orientée Objet en C++ – PDF
  • N°215: Utiliser shared_ptr<T> en C++ pour la gestion des ressources – PDF
  • N°214: Développez un IDE en C++ Partie II – PDF
  • N°213: Développez un IDE en C++ Partie I – PDF
  • N°212: Un serveur REST Web API en C++ – PDF
  • N°211: Pourquoi C++ en 2017 ? – PDF

NET 5, la plateforme unifiée

NET 5 arrive en fin d’année et c’est une révolution dans le monde du développement Microsoft car la plateforme adresse tous les domaines : du desktop au web, du gaming à l’IoT, du Cloud au Mobile :

NET 5

Le développement selon Microsoft

Microsoft envoie des messages parfois complexes sur le développement. En voici les fondamentaux :

  • La technologie utilisée est le Microsoft .NET Framework
  • L’environnement de développement est Visual Studio
  • Le langage phare est C#
  • Le développement mobile se fait avec Xamarin
  • Les API pour le Desktop sont WinForms, WPF, UWP et WinUI
  • Les API pour l’accès aux données sont ADO.NET et Entity Framework
  • La technologie Web est ASP.NET MVC et ASP.NET Web API
  • Microsoft décline .NET en .NET Core et ASP.NET Core pour Windows, Linux et MacOS
  • Le futur du développement est le Cloud Azure et l’intégration des services managés dans les applications

Le support XAML est maintenant inclus dans Windows 10, en natif. La librairie WinUI 3.0 contient les contrôles XAML natif Windows 10 pour l’ensemble des versions de Windows 10 (de 16xx à 1909) :

WinUI 2
WinUI 3

Avec NET 5, il n’y a plus NET Framework et NET Core, tout est fusionné. Il sera temps car sinon c’est la confusion. Microsoft indique que les nouveaux développements doivent se faire en NET Core et les développements existants doivent rester en NET Framework.

Comment devenir un Expert Windows ?

Cet article est la suite de Comment devenir un Expert Microsoft ?(http://netazurerangers.com/blog/comment-devenir-un-expert-microsoft/)

Windows est le fleuron technologique de Microsoft depuis 25 ans. Vous allez me dire, oui mais maintenant il y a Azure. OK mais Azure c’est quoi ? C’est ; si je fais abstraction de la partie Linux; Windows Server et Service Fabric… et ça, c’est Windows. C’est du C/C++. Et oui, encore ! Y a pas de secret. ça doit marcher vite et bien. Cela doit être fiable, robuste rapide et sécurisé.

Dans un de mes derniers post “C++ unsafe et unsecure ?” (http://netazurerangers.com/blog/c-unsafe-et-unsecure/), j’explique pourquoi C/C++ est le meilleur et pourquoi Microsoft fait 95% de ses produits avec. Microsoft est la société n°1 de l’industrie logicielle. Ce n’est pas une régie publicitaire comme Google ou Facebook, c’est de la Tech pure jus. Microsoft vend des produits et du Services. Bref passons…

Comment devenir un expert Windows ? La question est posée. Premièrement, on se renseigne sur les principes du système d’exploitation via Microsoft Docs (ex: MSDN LIbrary) sur https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/overview-of-windows-components

Ensuite, on lit le passage sur le mode User et le mode Kernel via https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode

A partir de là, on connait l’architecture de base de Windows. maintenant, on attaque les éléments sur système d’exploitation à savoir le kernel et le Scheduler de threads. Windows ordonnance des threads, Linux ordonnace des processus. Ces deux systèmes ne fonctionnent pas de la même façon. La doc sur les Processes & Threads est ici : https://docs.microsoft.com/en-us/windows/win32/procthread/about-processes-and-threads

Ensuite on passe à la pratique, comment créer un thread, un processus, atteindre la fin, etc. la doc des API appelée aussi doc de référence est ici: https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-reference

Les exemples les plus faciles sont visualisables via https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-functions#process-and-thread-functions et plus particulièrement la fonction CreateThread: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread?redirectedfrom=MSDN et son exemple: https://docs.microsoft.com/en-us/windows/win32/procthread/creating-threads

Pour tester cela, il faut installer Visual C++ disponible dans Visual Studio 2019 par exemple, Community Edition ou Pro 30 day trial. Si vous avez touché de l’argent de Papa Noël, achetez les livres suivants:

  • Windows via C/C++ de Jeffrey Richter et Christophe Nasarre

Moi j’ai acheté Inside Windows NT en 1992 et j’ai eu le virus.

Windows c’est énorme. C’est puissant. Vous lisez le livre Windows Internals et vous aurez la vision ; vous comprendrez comment marche l’OS. C’est très intéressant et vous n’aurez aucun mal à comprendre les nouvelles technologies Microsoft avec ça. Microsoft NET, le CLR, la BCL, c’est fait avec un peu de C++ et du C#/PInvoke sur l’API Windows alias Win32. Regardez le code sur GitHub du CoreCLR (https://github.com/dotnet/runtime) et du CoreFX.

Il y a des légendes urbaines selon lesquelles Microsoft réécrit Windows from scratch; ça c’est pour les managers et le 01 Informatique. Pour les techniciens, la vérité c’est que Windows est assis sur le même code et évolue depuis 25 ans. Le code est amélioré et régulièrement remanié en C++ Moderne. Je peux vous le certifier car j’ai le code source de Windows NT 4, Windows 2000 et accès au dernier code source de Windows 190x. Le code est fait en :

  • C pour le kernel et les drivers
  • en C/C++ pour le reste.

Le C++ Moderne c’est quoi ?

  • de la libération automatique de la mémoire avec les points intelligents (smart pointers)
  • utilisation de la bibliothèque standard STL (Standard Template Library)
  • utilisation du C++11/14/17 avec auto, les lambdas, etc.

Windows utilise beaucoup la technologie COM. Un composant COM est enregistré dans la base de registres et est invoqué via des API ( https://docs.microsoft.com/en-us/windows/win32/api/_com/)

Un composant COM est une classe avec AddRef, Release, QueryInterface et des méthodes:

La création du composant COM est faite via CoCreateObject et la factory COM:

Pour plus d’informations sur les composants COM, j’ai réalisé en 200x une traduction de certains éléments de “Inside COM+ Base Services”: Apartments | Threads | Apartments types | Threading for In-Proc components | Apartment and languages

Pour plus d’informations sur COM, mettre la main sur Inside COM+ Base Services ( http://www.windowscpp.com/Books/MSPress-InsideCOMBaseServices.zip ) ou sur docs mais sur docs, la doc est spartiate.

Les années 201x ont vu Microsoft se tourner vers l’open-source donc vous pouvez trouver des composants Windows en open-source:

Faites comme moi, étudiez ces deux modules et essayez de contribuer dans GitHub. Et qui sait, un jour, vous travaillerez peut-être pour Microsoft !

Chiche !

Christophe | www.christophepichaud.com

Mes résolutions Microsoft pour 2020.

(EMail envoyé à mes anciens collègues Microsoft)

Amis Softies,

Voici mes bonnes résolutions pour 2020…

Je vous fais une annonce: je souhaite retravailler pour Microsoft et plus particulièrement pour Corp. Cela passera peut-être par du Services avant, je ne sais pas mais j’y travaille. Comme je le disais à mes copains Alain et les zEric, travailler chez Microsoft était un rêve mais qui s’est arrêté brusquement. Je ne reviendrais pas sur cet épisode et les raisons de cet arrêt, la page est tournée.

Depuis que je suis MVP, j’ai accès à pleins de choses et c’est génial. Microsoft est the number 1 software company, ça ne fait aucun doute. Vous y travaillez et vous le savez. Cette entreprise est magnifique, les produits sont nickel et surtout la technologie est fantastique. Qui ne se prend pas de passion pour un SDK ou un produit ? Notre métier est fait de passion, de rire et de larmes. Les échecs d’aujourd’hui seront les succès de demain.

Quand je lis le code de Windows, c’est complexe mais c’est beau. Le code C++ contient quelque chose que ne possèdent pas les autres langages. Le style Microsoft à base de COM est très spécial. Le mix entre les types Windows (COM strings, VARIANT, UINT, DWORD, UNICODE LPWSTR, wchar_t et char *) et les types C++ (wstring et string) fait que le code est fait avec plusieurs styles. On trouve le code business fait la plupart du temps en composants COM ou en code C++ ISO et la glue spécifique en API Win32. Don Box disait « COM is love ». C’est vrai. Une coclass d’un composant COM, c’est une classe C++. On a une classe en mode shared_ptr, un ctor ambigu AddRef, un dtor ambigu Release, un cast QueryInterface pour obtenir les différentes interfaces (une classe C++ peut implémenter plusieurs interfaces et peut hériter de plusieurs classes contrairement à C# qui lui ne peut hériter que d’une seule classe).

Dans le code de Windows Terminal, il y par exemple le code WinUI du cadre (tabbed et Window et popup menu et menu) écrit en pure Windows API et XAML Islands, le code du cmd avec son char buffer engine, son interpreter et le code Windows ancestral réécrit en moderne C++. Le code est amélioré. C’est comme un bon Bourgogne, il se bonifie avec le temps. Le code C++98/03 est amélioré en code C++11/14 et progressivement ce Modern C++ fait que le code est nickel, il est beau ! Par exemple, j’ai fait une contribution avec PR (pull-request acceptée le 19 June 2019 https://github.com/microsoft/terminal/pull/1161 ) qui consistait à mettre un shared_ptr sur un raw pointer et à faire la plomberie qui va avec pour y jouer avec une référence derrière. La mémoire est libérée automatiquement via le pointeur intelligent (smart pointer). C’est beau. Il y a plein de TODO et FIXME dans le code pour améliorer le code legacy Windows. J’ai vu que cela fait 4 ans que le code du CMD est refactoré et amélioré. C’est peut-être ma mémoire qui me trahie mais je crois que c’est ça ; vu dans les commentaires de code. On ne se rend pas compte de la puissance des outils de Windows. Rien que l’archive de code GitHub du Windows Terminal (https://github.com/microsoft/terminal) fait 9.3 MB. Il y en a pour 6.3 MB de fichiers .h et .cpp. C’est pas mal déjà. Enorme pour un seul individu à comprendre. Le CMD est un outil complexe qui va au-delà d’un simple dir c:\ ! C’est un pilier de Windows. Nos admins système le savent bien.  Je compte bien continuer de m’investir encore un peu sur Windows Terminal car c’est passionnant. C’est ma première résolution.

Ensuite, il y a le CoreCLR (https://github.com/dotnet/runtime) qui est le runtime NET. Là je m’y mettre à fond car c’est une partie de mon avenir qui se joue la dessus. Je vais apprendre et potasser la bête pour bien comprendre comment ça marche. L’archive fait 99MB et unzipped ça fait 777MB. C’est énorme mais bon, y a les tests unitaire & co mais bon le code C++ fait environ une taille de 76MB sans les tests. Autant vous dire que c’est énorme de chez énorme. OK Windows fait 1 GB de source code mais la on parle juste du folder Windows\NET Framework mscoree.dll et compagnie… avec les DLL de la BCL system.xxx. & co. J’en ai pour 3 mois à naviguer, explorer et comprendre le code. C’est ma seconde résolution. Ensuite, je tente l’Issue… Faut que je me trouve un truc facile au début, un FIXME ou TODO basic pour rentrer dedans.

Ensuite il y a le code de Windows via le NDA Shared Source Initiative et là, c’est mon kiffe régulier : lire le code source de Windows. Pour ceux qui ne connaissent pas le C++, c’est l’occasion de s’y mettre. Achetez mon livre « Aide-Mémoire C++ » et demandez à avoir accès au code source de Windows et admirez la qualité du code des Ingénieurs Windows. J’ai énormément de respect pour le code de Windows. Depuis que j’ai mis la main sur le leak Windows NT4 et Windows 2000 (2 GB de source code) dans les années 2000/2002, j’ai passé de nombreuses heures à étudier ce code. Le kernel, les dlls RTL NTUser & co, le Shell, le File Explorer. C’est un roman de Star Wars en 350 Volumes. C’est beau. C’est complexe mais à la fois subtile et organisé. Putain, c’est bon ! C’est pour cela que je voue une admiration sans faille à Bill Gates. Windows est un fleuron de technologies. OK des fois c’est du bon vieux C/C++ mais ça marche vite et bien.

Quand j’ai découvert Windows Internals (7th edition Part 16th Edition Part 16th Edition Part 2). dans les années 2000, j’ai vu la vierge car cela m’a aidé à comprendre les sources Windows puis quand j’ai découvert les Windows Protocols (https://docs.microsoft.com/en-us/openspecs/protocols/ms-protocolslp/9a3ae8a2-02e5-4d05-874a-b3551405d8f9), ça a été le graal. Quand j’étais au Services en 2017, j’ai été surpris, les gens ne connaissent pas ça. La culture du NET fait que les gens sont très peu cultivés sur Windows alors que c’est le fleuron de la companie. OK, maintenant y a Azure mais bon Azure c’est Windows Server et Service Fabric et tout ça c’est Windows. Je fais abstraction de la partie Linux… Chaque Microsoftie devrait se voir offrir le livrer Windows Internals pour son arrivée dans l’entreprise !

Bref vous l’aurez compris, mon objectif c’est de bosser pour Corp. J’y travaille. Je vais trouver un moyen de tirer mon épingle du jeu via GitHub et mes relations avec l’équipe Visual C++ aux US. Mon pote Simon Brand est bien advocate C++ et vie pourtant à Edinburg, UK. La France c’est très spécial… Le C++ est limité. Les entreprises pour Services font, pour le développement avec les Technologies Microsoft, du C# / NET.

Bonne Année à toutes les copines.

Bises à mon mentor EricV. Bises à EricMitt. Bises à Alain.

Bises à Agnes , ma Directrice de Projet HEXV2 de OBS en 2006…. On se marrait bien avec GGray, PCP, Nicolas. Je suis toujours en relation avec les ex-collègues de OBS pour qui on devait remplacer leur système Linux (700.000) BAL POP/IMAP par Exchange Server via HMC… On se revoit régulièrement autour d’une bière avec Gael Roualland, le petit génie de OBS qui nous donnait du fil à retordre et ses potes de l’époque. Depuis que je suis passé aussi à Debian Linux et Ubuntu (C++ oblige), ils m’acceptent mais me chambrent en me disant que Microsoft est mon meilleur ennemi façon je t’aime moi non plus. Ils me disent de tout plaquer de builder que sur Linux et que j’aurais plus de succès qu’avec Microsoft… Je ne suis pas d’accord. 25 ans de C++ Microsoft, ça ne s’abandonne pas, au contraire, ça se monnaie. Et quand on aime, on ne compte pas ses efforts.

Christophe | www.christophepichaud.com