System.CodeDom Namespace

No se si muchos conocen las maravillas del namespace del .NET System.CodeDom...

La verdad, después de haberlo usado intensivamente en un par de proyectos, puedo decir que como no tengas cuidado es un infierno... y si lo tienes... pues como que también... pero no me mal interpretéis... en el próximo proyecto seré yo quien pida usarlo otra vez.

Si alguien no conoce el namespace, pues, es el susodicho sirve para genera código fuente. Es decir... yo llamo a unas funciones, y voy creando los fuentes de clases, métodos, variables... vamos... lo que se hacía toda la vida concatenando cadenas, y que al final nadie se enteraba de lo que pasaba.

La principal ventaja de este namespace, es que el código que generas de está forma, es multilenguaje... es decir... una vez que hago las llamadas a las funciones pertinentes, puedo generar las clases en Visual Basic o en C# sin modificar una sola línea de código.

Y otra ventaja que también me gusta mucho... es que con él puedo generar código automáticamente en mis controles... por ejemplo... pongámonos en el hipotético caso de un control, al que siempre que se usa, hay que pasarle el nombre del control padre... aunque ya se que a priori que ese va a ser this.Page

Pues bueno, con System.CodeDom se puede generar automáticamente ese código que siempre hay que escribir, y lo mejor de todo... se generará VisualBasic en un proyecto VisualBasic, Csharp en uno Csharp... o si usas otro lenguaje se generará ese otro lenguaje...

Pero bueno... a hasta ahora, lo que me fastidiaba era que cuando quería generar un fichero completo de Visual Basic (asease cuando generaba una compileUnit en VB.NET), el código generado siempre era "Option Strict Off" y "Option Explicit Off" aunque yo dijese lo contrario en el proyecto.

Pues bueno... aunque no está documentado, prácticamente en ningún sitio, con estas simples líneas, se puede generar código "Option Strict On" y "Option Explicit Off"

compileUnit.UserData.Add("AllowLateBound", false);                      // Option Strict On
compileUnit.UserData.Add("RequireVariableDeclaration", true);           // Option Explicit On
compileUnit.UserData.Add("GenerateImports", true);                      // Crea Imports NameSpace...

Por ahora ya queda presentado... otro día ya publicaré un pequeño control que use System.CodeDom.