tutorial - ¿Cómo puedo ver MSIL/CIL generado por el compilador de C#? ¿Por qué se llama ensamblaje?
se necesita un ensamblado con nombre seguro (12)
- Sí, está en asamblea.
- Necesita .NET Reflector o ILDasm .
- Más detalles sobre el control de montaje HERE .
PD: Como estás siguiendo algunos libros, te recomendaré mucho CLR a través de C # .
Soy nuevo en la programación .NET C #. Estoy siguiendo algunos libros. Se dice que en lugar de compilarlo directamente en código binario (código nativo). El código de alto nivel se convierte a un lenguaje intermedio (llamado MSIL también conocido como CIL). Pero cuando compilo, obtengo un archivo exe / Dll.
- ¿Este MSIL / CIL está incluido en este archivo exe / dll?
- Quiero ver ese código de idioma intermedio. Solo para sentir su existencia. Cómo verlo?
- Están llamando a este archivo exe / dll un
assembly
. ¿Están usando esta "palabra elegante" para diferenciarlos de los archivos exe / dll que contienen código binario (código nativo)?
- Sí, lo es, más exactamente en la sección
.text
del archivo PE (portable executable = * .exe o * .dll). Más información se puede encontrar here . - La mejor opción es usar ILSpy (el reflector ya no es gratuito). Es un desensamblador libre que puede desmontar su ensamblaje en MSIL pero también C #, VB (hasta cierto punto). .NET Framework SDK contiene ILDasm, que es el difusor MSIL oficial.
- Básicamente sí. Un ensamblaje es un archivo que contiene el código MSIL y los metadatos correspondientes. Esto no está restringido a los archivos PE per se, pero todas las implementaciones actuales de CLR los usan.
Si puedo recomendar un buen libro sobre ese tema también, es experto .NET 2.0 IL Assembler por Serge Lidin. Él es el tipo que diseñó MSIL.
Acabo de pasar un par de horas buscando la mejor herramienta que me permita ver el código IL directamente dentro de Visual Studio.
La única solución que encontré hasta ahora es Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
¡funciona bastante bien!
De lo contrario, la segunda mejor solución, pero sin integración visual en el estudio, es JetBrains dotPeek, que es bastante increíble para ser honesto.
Ahora hay otra opción. Puede hacer esto en VS Code con esta extensión construida con Roslyn. Esto está actualmente limitado a .NET Core .
Creo que se llaman "asambleas" porque una asamblea es un conjunto de módulos, ensamblados por un manifiesto.
conjunto de múltiples archivos http://i.msdn.microsoft.com/dynimg/IC125851.gif
Vea los contenidos de la Asamblea para más detalles.
En muchos aspectos, los ensamblados de .NET son similares a los paquetes de código de bytes de Java.
- Sí. También contienen manifiestos y otros datos, pero el CIL es parte del exe / dll.
- Use ILDasm o Reflector : la mayoría de la gente diría Reflector, ya que es mucho más poderoso. Ambos le mostrarán qué se produjo CIL. Wikipedia tiene una lista de todas las instrucciones CIL , para una mejor sensación (es similar a un ensamblaje).
- Supongo que se entiende como un conjunto de código. Una buena forma de diferenciarlo de nativo.
Otra opción: usar ReSharper
Vista sincronizada de fuente / IL: la línea de fondo azul izquierda corresponde con el bloque IL derecho
En Visual Studio:
- Elija ReSharper | Windows | Visor de IL
- o Menú contextual: Navegar | Código IL
Admite la vista sincronizada de Código fuente e IL: al hacer clic en una instrucción en la fuente, se resalta el bloque correspondiente en IL (y viceversa). Muestra las descripciones para IL de Microsoft Developer Network y "Conjunto de instrucciones de lenguaje intermedio común (CIL)" de la especificación estándar de ECMA.
vea Ver el lenguaje intermedio (IL) en la Ayuda de Resharper. La imagen de arriba es de la Ayuda de Resharper.
La opción gratuita es usar Jetbrains dotPeek
ver también: "Exploración del lenguaje intermedio (IL) con ReSharper y dotPeek", por Maarten Balliauw, 19 de enero de 2017 - Jetbrains Blog
Sé que esta es una vieja pregunta, y preferiría cualquiera de las herramientas anteriores. Sin embargo, en un apuro, ha habido un visor de MSIL en la caja con Visual Studio desde al menos la Versión 2005.
La herramienta se llama ildasm.exe
y se encuentra en las siguientes carpetas después de las instalaciones predeterminadas de Visual Studio:
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
"
Para obtener más información, consulte: " Cómo ver el contenido de ensamblaje " en MSDN Library.
Según mi experiencia, la mejor fuente de conocimiento relacionado con IL es Andrew Troelsen "Pro C # and .NET Platform". A partir de la 3ª edición, tiene un capítulo realmente notable (aproximadamente 50 páginas) sobre cómo entender IL e incluso escribir su propio código y usar ILAsm. He empleado esa información para investigar si existe herencia múltiple en .NET world. También podría tratar de emplear algunas características muy interesantes en IL (por ejemplo, filtrado de excepciones que solo existe en VB pero no en C #).
Recomiendo leer ese capítulo.
Eventualmente, .NET Reflector es un estándar de la empresa para investigar el código IL de ensamblajes y el libro de Richter definitivamente es algo que "debe leer". Pero de otros libros como los mencionados anteriormente, podrías revelar cosas realmente útiles :)
Sí, cada ensamblaje en .NET world tiene algún código IL (junto con manifiesto) que se puede ver a través de Reflector o ILDasm. Aún más, Reflector podría mostrarle código optimizado C # y VB. Esto significa que cualquier persona puede ver el código fuente de un ensamblaje y es por eso que en los productos comerciales se utilizan ofuscadores.
Si lo quiere en línea, .NET Fiddle es excelente. Simplemente pegue su código y haga clic en la opción View IL
en la parte superior derecha.
Una de mis formas favoritas de ver IL para obtener un fragmento de C # es usar la herramienta gratuita LINQPad . Después de ingresar algún código y elegir "declaraciones C #" en la parte superior (o "Programa C #", lo que convenga), haga clic en el botón "IL" debajo del área de entrada del código, y verá el IL generado.
Usar LINQPad para esto es mucho más conveniente que cargar Visual Studio o ejecutar el compilador desde la línea de comando, luego cargar ILDASM y abrir el archivo .il con un editor de texto.
Yo quiero ver el idioma intermedio. Intente descargar JustDecompile de Telerik (que actualmente es gratis, aunque requiere un registro ).
Arrastra tu DLL y elige IL
en el cuadro desplegable en la parte superior.