Ich bin neu in der .NET C # -Programmierung. Ich verfolge ein paar Bücher. Es wird gesagt, dass es nicht direkt zu Binärcode (Native Code) kompiliert wird. High-Level-Code wird in Zwischensprache (MSIL, auch CIL genannt) umgewandelt. Beim Kompilieren bekomme ich eine Exe/Dll-Datei.
Assembly
. Verwenden sie dieses "ausgefallene Wort", nur um diese von den exe/dll-Dateien zu unterscheiden, die Binärcode (nativen Code) enthalten? .text
-Abschnitt der PE-Datei (Portable Executable = * .exe oder * .dll). Weitere Informationen finden Sie hier .Wenn ich Ihnen auch ein gutes Buch empfehlen kann, dann ist es Expert .NET 2.0 IL Assembler von Serge Lidin. Er ist der Typ, der MSIL entworfen hat.
Eine meiner liebsten Möglichkeiten, IL für ein snippet von C # zu sehen, ist das kostenlose LINQPad-Tool . Nachdem Sie einen Code eingegeben und oben "C # -Anweisungen" ausgewählt haben (oder "C # -Programm", je nachdem, was für Sie geeignet ist), klicken Sie auf die Schaltfläche "IL" unter dem Codeeingabebereich. Die generierte AWL wird angezeigt.
Die Verwendung von LINQPad ist viel bequemer als das Laden von Visual Studio oder das Ausführen des Compilers über die Befehlszeile, das Laden von ILDASM und das Öffnen der .il-Datei mit einem Texteditor.
Wenn Sie es online haben möchten, ist .NET Fiddle hervorragend. Fügen Sie einfach Ihren Code ein und klicken Sie oben rechts auf die Option View IL
.
PS: Da Sie einige Bücher verfolgen, empfehle ich Ihnen CLR über C # .
Ich glaube, dass sie "Assemblys" genannt werden, weil eine Assembly eine Menge von Modulen ist, assembliert zusammen durch ein Manifest.
Multi-File Assembly http://i.msdn.Microsoft.com/dynimg/IC125851.gif
Siehe Assembly Contents für Details.
Eine weitere Option: Verwenden Sie ReSharper.
Quell-/IL-synchronisierte Ansicht: linke blaue Hintergrundlinie entspricht dem rechten IL-Block
In Visual Studio:
Unterstützt die synchronisierte Ansicht von Quellcode und AWL - Wenn Sie auf eine Anweisung in Quelle klicken, wird der entsprechende Block in AWL hervorgehoben (und umgekehrt). Zeigt Beschreibungen für AWL aus dem Microsoft Developer Network und den Befehlssatz "Common Intermediate Language (CIL)" aus der ECMA-Standardspezifikation an.
siehe Anzeigen der Zwischensprache (IL) in der Resharper-Hilfe. Das obige Bild stammt aus der Resharper-Hilfe.
Kostenlose Option ist die Verwendung von Jetbrains dotPeek
siehe auch: "Erkundung der Zwischensprache (IL) mit ReSharper und dotPeek", von Maarten Balliauw, 19. Januar 2017 - Jetbrains Blog
Ich habe gerade ein paar Stunden damit verbracht, nach dem besten Werkzeug zu suchen, mit dem ich den IL-Code direkt in Visual Studio anzeigen kann.
Die einzige Lösung, die ich bisher gefunden habe, ist Msiler https://visualstudiogallery.msdn.Microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
es funktioniert ganz gut!
Ansonsten ist JetBrains dotPeek die zweitbeste Lösung, jedoch ohne Visual Studio-Integration.
.NET-Assemblys ähneln in vieler Hinsicht Java-Bytecode-Paketen.
Ich weiß, dass dies eine alte Frage ist, und ich würde eines der oben genannten Tools vorziehen. Zur Not gibt es seit mindestens Version 2005 einen MSIL-Viewer mit Visual Studio.
Das Tool heißt ildasm.exe
und befindet sich nach Standardinstallationen von Visual Studio in den folgenden Ordnern:
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
"
Weitere Informationen finden Sie unter: " Gewusst wie: Anzeigen des Assembly-Inhalts " in der MSDN Library.
sharplab ist ein Online-Tool für einfache Anwendungsfälle. Geben Sie links Ihren Code ein, rechts erscheint IL.
Ich möchte die Zwischensprache anzeigen. Versuchen Sie, JustDecompile von Telerik herunterzuladen. (Die ist derzeit kostenlos, erfordert jedoch eine Anmeldung).
Ziehen Sie Ihre DLL ein und wählen Sie IL
aus dem Dropdown-Feld oben!
Aus meiner Erfahrung ist Andrew Troelsen "Pro C # and .NET Platform" die beste Quelle für IL-relevantes Wissen. Ab der 3. Auflage hat er ein wirklich überragendes Kapitel (ca. 50 Seiten), in dem erläutert wird, wie man IL versteht und sogar eigenen Code schreibt und ILAsm verwendet. Ich habe diese Informationen verwendet, um zu untersuchen, ob in der .NET-Welt mehrere Vererbungen vorliegen. Sie könnten auch versuchen, einige sehr interessante Funktionen in IL zu verwenden (z. B. das Filtern von Ausnahmen, die nur in VB, aber nicht in C # vorhanden sind).
Ich empfehle dringend, dieses Kapitel zu lesen.
Schließlich ist .NET Reflector ein Unternehmensstandard für die Untersuchung des IL-Codes von Baugruppen, und Richters Buch ist definitiv "Muss". Aber aus anderen Büchern, wie oben erwähnt, könnte man wirklich nützliche Dinge enthüllen :)
Ja, jede Assembly in .NET-Welt enthält einen IL-Code (zusammen mit einem Manifest), der durch Reflector oder ILDasm angezeigt werden kann. Darüber hinaus könnte Reflector Ihnen C # - und VB -optimierten Code anzeigen. Dies bedeutet, dass jede Person den Quellcode einer Assembly anzeigen kann. Deshalb werden in kommerziellen Produkten Verschleissgeräte verwendet.
Es gibt jetzt eine andere Option. Sie können dies in VS Code mit dieser Erweiterung mit Roslyn erstellen. Dies ist derzeit beschränkt auf .NET Core .