Je suis nouveau dans la programmation .NET C #. Je suis quelques livres. On dit cela au lieu de le compiler directement en code binaire (code natif). Le code de haut niveau est converti en langage intermédiaire (appelé MSIL aka CIL). Mais lorsque je compile, je reçois un fichier exe/dll.
Assembly
. Utilisent-ils ce "mot de fantaisie" juste pour les différencier des fichiers exe/dll contenant du code binaire (code natif)? .text
du fichier PE (portable exécutable = * .exe ou * .dll). Plus d'informations peuvent être trouvées ici .Si je peux aussi recommander un bon livre à ce sujet, il s'agit de l'assembleur Expert .NET 2.0 IL de Serge Lidin. C'est le gars qui a conçu MSIL.
Une de mes façons préférées de voir IL pour un extrait de C # est d'utiliser free outil LINQPad . Après avoir entré du code et choisi "C # statement" en haut (ou "C # Program", selon ce qui convient), cliquez sur le bouton "IL" sous la zone de saisie du code pour afficher l'IL généré.
Utiliser LINQPad pour cela est beaucoup plus pratique que de charger Visual Studio ou d'exécuter le compilateur à partir de la ligne de commande, puis de charger ILDASM et d'ouvrir le fichier .il avec un éditeur de texte.
Si vous le voulez en ligne, .NET Fiddle est excellent. Il suffit de coller votre code et de cliquer sur l'option View IL
en haut à droite.
P.S: Comme vous suivez des livres, je vous recommanderai vivement CLR via C # .
Je crois qu’ils sont appelés "assemblées" car une assemblée est un ensemble de modules, assemblés par un manifeste.
Assemblage de plusieurs fichiers http://i.msdn.Microsoft.com/dynimg/IC125851.gif
Voir Contenu de l'assemblage pour plus de détails.
Une autre option: Utiliser ReSharper
Vue source/IL synchronisée: la ligne d’arrière-plan bleue gauche correspond au bloc IL droit
Dans Visual Studio:
Prend en charge la vue synchronisée du code source et IL - Lorsque vous cliquez sur une instruction dans la source, le bloc correspondant dans IL est mis en surbrillance (et inversement). Affiche les descriptions pour IL à partir du réseau de développeurs Microsoft et "Jeu d'instructions CIL (Common Intermediate Language)" de la spécification ECMA standard.
voir Visualisation d'un langage intermédiaire (IL) dans l'aide de Resharper. L'image ci-dessus provient de l'aide de Resharper.
L'option gratuite consiste à utiliser Jetbrains dotPeek
voir aussi: "Exploring Intermediate Language (IL) avec ReSharper et dotPeek", par Maarten Balliauw, 19 janvier 2017 - Blog Jetbrains
Je viens de passer quelques heures à rechercher le meilleur outil qui me permettrait de visualiser le code IL directement dans Visual Studio.
La seule solution que j'ai trouvée jusqu'à présent est Msiler https://visualstudiogallery.msdn.Microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
ça marche plutôt bien!
Sinon, la deuxième meilleure solution, mais sans intégration Visual Studio, est JetBrains dotPeek, ce qui est assez impressionnant pour être honnête.
À bien des égards, les assemblys .NET sont similaires aux packages de code secondaire Java.
Je sais que c'est une vieille question et je préférerais l'un des outils ci-dessus. Cependant, à la rigueur, un visualiseur MSIL est présent dans la boîte avec Visual Studio depuis au moins la version 2005.
L'outil s'appelle ildasm.exe
et se trouve dans les dossiers suivants après les installations Visual Studio par défaut:
Visual Studio 2005 "C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"
Visual Studio 2008 "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe
"
Visual Studio 2010 "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe
"
Pour plus d'informations, voir: " Comment: afficher le contenu de l'assembly " dans la bibliothèque MSDN.
sharplab est un outil en ligne idéal pour les cas d'utilisation simples. Tapez votre code à gauche, IL apparaît à droite.
Si vous souhaitez afficher la langue intermédiaire, essayez de télécharger JustDecompile de Telerik (qui est gratuit actuellement, mais nécessite une inscription).
Faites glisser votre DLL et choisissez IL
dans la liste déroulante située en haut!
D'après mon expérience, Andrew Troelsen «Pro C # and .NET Platform» constitue la meilleure source de connaissances en matière de maîtrise de l'information. Depuis la 3ème édition, il a un chapitre vraiment remarquable (environ 50 pages) sur la compréhension de l’IL et même sur l’écriture de votre propre code et l’utilisation de ILAsm. J’ai utilisé ces informations pour déterminer s’il existe un héritage multiple dans le monde .NET. Vous pouvez également essayer d’utiliser certaines fonctionnalités très intéressantes dans IL (par exemple, le filtrage des exceptions qui existent uniquement dans VB mais pas dans C #).
Je recommande fortement de lire ce chapitre.
Finalement, .NET Reflector est un standard d’entreprise permettant d’enquêter sur le code des assemblys IL et le livre de Richter est sans aucun doute un article "à lire absolument". Mais à partir d'autres livres comme mentionné ci-dessus, vous pourriez révéler des choses vraiment utiles :)
Oui, chaque assemblage du monde .NET contient du code IL (le long du site avec le manifeste) pouvant être visualisé via Reflector ou ILDasm. Encore plus, Reflector pourrait vous montrer du code optimisé en C # et VB. Cela signifie que toute personne peut consulter le code source d'un assemblage, raison pour laquelle des obfuscateurs sont utilisés dans les produits commerciaux.
Il y a maintenant une autre option. Vous pouvez le faire dans Code VS avec cette extension construite avec Roslyn. Ceci est actuellement limité à .NET Core .