Viendo el código fuente de .NET con Visual Studio 2012

Quien tenga una versión anterior de Visual Studio seguro que sabe que se puede navegar por las tripas de .NET y ver cómo Microsoft ha implementado todo el tema. Pues bien, más o menos a mediados de agosto del corriente (2012) se anunció la disponibilidad del código fuente de .NET 4.5, lo que nos permite meternos en las tripas del Framework y, lo que es mucho más interesante, mirar cómo funciona todo lo nuevo relacionado con Windows 8.

El artículo citado da un somero repaso a las novedades no específicas de la biblioteca, entre las que se pueden destacar el añadido de métodos asíncronos en conjunción con las clases de tareas, y que ahora el jitter es capaz de optimizar el código para los procesadores multinúcleo. También se mejora el rendimiento de casi todo (como siempre dicen, lo que a veces no es cierto), y se potencia el acceso de .NET a nueva parte nativa de Windows 8 (o RT o Metro o como quieras llamarlo), que es código nativo escrito en C++ y C++/CX, permitiendo a este lenguaje acceder, también, a código escrito en otros lenguajes .NET gracias a su parte CX (que como ya he dicho varias veces, es nativa).

Como en otras versiones, el código fuente está disponible para descarga directa, o para ser visto desde nuestro propio código, y también como símbolos de depuración.

La captura de abajo nos muestra una aplicación Metro por defecto, detenida en un punto de interrupción, tal y como se ve en mi Visual Studio 2012 sin cambiar la configuración por defecto:

clip_image002

Fijaos en que la ventana de Call Stack estgá prácticamente vacía, y si hacemos Step Into simplemente saltamos a la siguiente línea de nuestro código fuente.

Vamos a habilitar la posibilidad de meternos dentro del código de Microsoft.

Nos vamos a TOOLS -> PROPERTIES, abrimos la pestaña lateral de Debugging, y cambiamos las siguientes opciones:

· Marcar Enable Just My Code

· Marcar Enable .NET Framework source stepping

· Desmarcar Step over porperties and operators (Managed only)

· Marcar Enable source server support

· Desmarcar Require source files to exactly match the original version.

Dejadlo todo más o menos como en la imagen:

clip_image003

Ahora, en la pestaña de Symbols, hay que añadir una nueva dirección de descarga de los mismos: http://referencesource.microsoft.com/symbols. Como en la capura.

clip_image004

Finalmente, cuando le deis a OK el IDE se quedará bajando ficheros. Hay que esperar a que termine, y dependiendo de lo rápida que sea tu conexión, tendrás que esperar bastante tiempo.

Con esta configuración, cada vez que se necesite algo, el IDE irá a los servidores de Microsoft, por lo que la carga y depuración de vuestro programa podría ser muy lenta a veces… por lo que se pueden bajar todos los símbolos de una tacada e instalarlos de forma local, apuntando la URL anterior a done los hayamos instalado. Podéis bajarlos de aquí.

La siguiente captura muestra algo de las tripas de Metro:

clip_image006

Vale. Ahora el tío de la rebaja. ¿Habéis intentado profundizar en el código fuente, en métodos como el Activate() de la primera captura? No entra, ¿verdad? No muestra código fuente, sino que simplemente salta sobre la llamada.

Un gallinfante a quien adivine por qué es.

Vale: es código nativo. Es decir, la parte Metro del .NET Framework no es código manejado, sino nativo. Es decir, está escrita en C++/CX, en donde la parte CX actúa como Sugar Syntax de todo el perifostio COM y COM+ que finalmente es .NET

Y todavía me atrevería a añadir algo más. Metro esconde en la manga algunos trucos de desarrollo que a MS no le interesa que se sepan, y ya visteis lo fácil que es hacer ingeniería inversa de una aplicación .NET. Si toda esa parte hubiera estado hecha con .NET, sería facilísimo meterle mano.

¡Y qué cojones, donde esté C++ que se quite cualquier lenguajucho de mala muerte! 😉

No puedo editar las propiedades en XAML ("Property editing not available")

Ayer me pasó algo muy curioso con Visual Studio 2010SP1, y es que, de repente, el editor XAML se quedó tonto del todo y la ventana para editar las propiedades dijo que “Property editing not available”… y ahí se quedó el jodío, enseñando ese texto y nada más.

Y no, no estaba experimentando ni haciendo ninguna guarrería con el editor. De hecho estaba tecleando código en un BackgroundWorker que nada tiene que ver con la interfaz, y menos con la ventana (perdón, Page, que ahora ando con esto del Windows Phone) que falló.

La cosa era muy curiosa, porque el editor XAML funcionaba bien, y si dejabas caer algún componente sobre la ventana este se añadía sin problemas. Lo que no funcionaba era la ventana de propiedades.

En Connect hay recogido un bug que se supone fue solucionado en la RTM, pero yo acabo de comprobar que no ha sido así. Quizás hayan rebajado un poco la incidencia, pero sigue ahí.

De nuevo quiero reiterar que no toqué nada. Estaba en una ventana editando código e hice clic sobre la que mostraba el Page, dividida entre XAML y parte visual. Al redibujarse, el Page dio un salto él solo, pasando de 80% a 100% y todo dejó de funcionar.

En el citado enlace se dan varias soluciones, que a mi no me funcionaron. Incluso cerré y abrí el IDE, recompilé, volví a abrir todas las ventanas… Nada.

Lo único que solventó el tema fue limpiar la solución, cerrando el IDE inmediatamente después. Al abrirlo de nuevo, aparecieron un par de warnings y errores sin mucho sentido en relación a dicho Page. Una vez reconstruida la solución, todo volvió a la normalidad.

Lo dicho, aviso para navegantes y cómo lo solucioné yo.