Visual Studio

Los archivos .tt (T4) no funcionan en proyectos tipo Website

Visual Studio 2008 Logo

Visual Studio 2008 Logo

Ya hace meses que no configuraba Subsonic desde cero en un proyecto, y por lo visto la última vez que lo hice, fue Subsonic 3.0 para un proyecto de Windows Forms.

Hago este post porque no está señalado en letras grandes en la pagina de Subsonic (supongo que esperan que todo mundo lo sepa de antemano), pero los archivos .tt que hay que arrastrar como parte del setup de SubSonic, simplemente no funcionan en proyectos de tipo Website.

Es decir, si queremos utilizar SubSonic 3.0 en un proyecto de tipo Website, la solucion es agregar un proyecto de tipo Class Library, arrastrar los archivos .tt a ese proyecto, y luego hacer referencia a la Class Library desde el proyecto tipo Website.

Hay otra solucion que es utilizar la Command-Line Tool  for Text Templates (de Microsoft), y en el siguiente artículo explican como usarla en Website projects: Visual Studio Website Projects: Add context menu for T4 files. El unico problema con esta alternativa es que el context menu que se agrega, se muestra para todos los tipos de archivos en Visual Studio, no solo los archivos T4.

Como referencia al problema, les dejo una liga a una pregunta en StackOverflow.com, en la que mencionan algunos de los principales problemas con los que se topa la gente al estar configurando Subsonic. De hecho, uno de los comentarios que hacen es precisamente que deberían de especificar esto de los .tt’s en Website projects desde el inicio.

Post: SubSonic 3 Installation doesn’t work?

Tip de Visual Studio: Simular click en boton de Mostrar Archivos Abiertos

Visual Studio 2008 Logo

Visual Studio 2008 Logo

No recuerdo en que blog leí este tip, pero es buenísimo.

En Visual Studio 2008 (no he probado en 2005), el presionar CTRL + ALT + DownArrow muestra una lista de los documentos abiertos actualmente.

Visual Studio - Simular click en boton de documentos activos

Visual Studio - Simular click en boton de documentos activos

Por si no fuera poco, la lista que se muestra soporta texto predictivo. Es decir, que si tecleamos una o dos letras del archivo que queremos seleccionar en la lista, Visual Studio va a mostrar highlighted el item que corresponda a las letras que tecleamos.

IMPORTANTE: Al tener ReSharper instalado, al parecer ReSharper sobre-escribe el shortcut con Resharper.Resharper_GoToNextOcurrence. Realmente batallé como 15 minutos porque a pesar de que en el dialogo de Keyboard Bindings yo estaba asignándole el keyboard manualmente a Window.ShowEzMDIFileList, que es como originalmente se llama la acción que se corre al presionar ese boton, el shortcut solo funcionaba en la Start Page de Visual Studio, y no en archivos .cs o .aspx.

En teoría el keyboard shortcut está aplicado en el esquema Global (debería funcionar en cualquier tipo de ventana/archivo abierto) pero de alguna manera estaba tomando diferente acción segun el tipo de archivo en el que estuviera abierto en ese momento. Lo que tuve que hacer fue Abrir el dialogo de Keyboard Bindings (Tools -> Customize -> Keyboard) y después:

  1. Teclear el shortcut en el campo de “Press Shortcut Keys
  2. Fijarme en que Acciones estaban usando el Shortcut (justo abajo, en el campo “Shortcut Currently Used By
  3. Arriba, en el campo de “Show Commands Containing“, teclear la Acción de los otros comandos que estaban usando el shortcut
  4. Presionar el botón “Remove” que está al lado del campo “Shortcuts for selected command
Como corregir posibles problemas de Keyboard Shortcuts en Visual Studio

Como corregir posibles problemas de Keyboard Shortcuts en Visual Studio

En el screenshot aparece sin texto el campo de ” Shortcuts for selected command”  y el boton de “Remove” aparece deshabilitado, pero se van habilitado y llenando al seguir los pasos. Simplemente es para usar un solo sceenshot.

Hay que entender que estamos haciendo. En el campo de “Shortcut Currently Used By“, al final de cada item y entre parentesis, está el contexto dentro del cual es válido el shortcut. En algunos casos es para ventanas/documentos de Design Time, otros para documentos de HTML View, etc. Lo que hacemos al presionar “Remove” es eliminar el uso de esta combinacion de teclas (CTRL + ALT + DownArrow) para ese contexto, para que pueda funcionar correctamente en el contexto Global (cualquier ventana o tipo de documento que sea el activo).

Aunque tambien se puede usar CTRL + TAB para la navegación entre archivos abiertos, sinceramente me gusta más esta nueva manera de navegar entre documentos abiertos, es menos intrusiva.

Para quienes tienen abiertos 5 o 6 documentos a la vez, tal vez no sea mucho problema, pero ultimamente en el trabajo he tenido 20 o 30 abiertos a la vez, y es un relajo encontrar el documento al que quieres cambiarte.

Espero que les sirva.

Visual Studio: Temas con colores oscuros

Ragnarok Grey - Visual Studio

Ragnarok Grey - Visual Studio

Los últimos meses he estado pasando aproximadamente 15 horas enfrente del monitor, generalmente programando en Visual Studio.

Nunca me había molestado en personalizar el esquema de colores y fonts de ningun programa, pero siendo tantas las horas de uso de Visual Studio, me topé con un par de posts que hablaban de la enorme diferencia que puede hacer para los ojos el usar un “theme” de alto contraste.

No fue hasta que me puse a ver los screenshots de varios Visual Studio usando colores oscuros que me di cuenta de lo mala que es la font por default que usa Visual Studio, al igual que el esquema de colores default.

Bien dijo Scott Hanselman que un cambio como éste, aunque es muy sencillo y pareciera sin tanta importancia, puede darle a uno energías y motivarlo a trabajar más.

Después de probar unos 8 diferentes themes hechos por diferentes programadores, y que fueron tan amables para compartirlos, me decidí a usar Ragnarok Grey, hecho por Tomas Restrepo, y que utiliza la font Consolas (me agradó mucho) en un tamaño muy grande, 15. No me gusta mucho el color rosa que se usa para los Strings, pero bueno.

Los pasos para importar cualquier theme en Visual Studio (archivos con terminacion .vssettings) son muy sencillos:

  1. Ir al menu Tools -> Import and Export Settings
  2. Import Selected Environment Settings
  3. Guarda tus settings actuales, y hacer click en Next
  4. Elegir el archivo .vssettings que quieras
  5. Hacer click en “Next”
  6. Seleccionar “All Settings” (de todas maneras, estos themes solo traen los settings de Fonts y Colores, así que nada de tus otros settings se sobre-escribirá.

Aquí hay un post de Charlie Calvert, con impresiones de pantalla del proceso, sobre cómo cambiar settings de Fonts y Colores en Visual Studio.

También me gustó mucho un theme llamado Oren Ellenbogen’s Dark Scheme, pero terminó gustándome más la combinación de colores usados en Ragnarok Grey.

Obviamente también uso mucho el SQL Server Management Studio, que como no tiene la posibilidad que tiene Visual Studio para importar y exportar las configuraciones de colores, tuve que usar esta herramienta para poder copiar y usar los mismos settings de colores oscuros en el SQL Server Management Studio. Así se ve mi SSMS ahora

Ragnarok Grey SQL Server Management Studio

Ragnarok Grey SQL Server Management Studio

Les dejo también los links que me parecieron interesantes al estar leyendo sobre este tema.

Visual Studio Programmer Themes Gallery – El primer post que lei sobre esto, de Scott Hanselman, y con varias imagenes y links.

Commonality – VS Color Schemes – varios temas muy buenos para bajar, para VStudio 2005 y 2008

Custom Visual Studio Color Schemes – este blogger puso varios de los themes mas populares en un archivo rar, disponible para bajarse.

Cómo usar los themes (archivos .vssettings) en Visual Studio

Debuggeando con Breakpoints condicionales y Tracepoints en Visual Studio

Los breakpoints con condiciones y los Tracepoints son dos features de Visual Studio que mucha gente no conoce y que facilmente pueden ahorrar horas a la hora de estar analizando un problema en código.

Empecemos con los breakpoints condicionales. Supongamos que tenemos el siguiente codigo:

private void button1_Click(object sender, RoutedEventArgs e)
{
int sum = 0;

for (int i = 0; i <= 1000; i++)
{
sum += i;
}

MessageBox.Show(sum.ToString());
}

&#91;/code&#93;

Si quisiéramos evaluar el valor de la variable sum cuando el valor de la variable i sea 200 o 400 o 600, tendríamos 2 opciones:

1. Editar nuestro codigo para agregar un bloque IF, y poner un breakpoint adentro del código
2. Poner un breakpoint en la linea sum += i y presionar la tecla F5 200 veces, 400 veces o 600 veces. Lo peor es que he visto que varios desarrolladores lo hacen, por no conocer estas dos features de Visual Studio.

Con <strong>breakpoints condicionales</strong>, podemos hacer que <strong>el debugger de Visual Studio solo detenga la ejecucion cuando una condicion que nosotros asignemos sea verdadera</strong>. En este caso, usariamos la expresión

i == 200 || i == 400 || i == 600

Para crear un breakpoint condicional, los pasos son los siguientes:

1. Crear un breakpoint en la linea que queremos
2. Hacer click derecho sobre el breakpoint y seleccionar la opcion Condition

Visual Studio Menu de opciones para breakpoints

Visual Studio Menu de opciones para breakpoints

3. Se desplegara el dialogo de Breakpoint Condition

4. Teclear la condicion(es) que queremos y hacer click en OK.

Visual Studio Condicion de Breakpoint

Visual Studio Condicion de Breakpoint

Con esto, el debugger solo va a entrar cuando la condición o condiciones que hayamos asignado se cumplan. Cuando un breakpoint tiene una condición, se despliega un simbolo de + (más) en el círculo rojo, como se ve en la siguiente imagen.

Visual Studio breakpoint condicional

Visual Studio breakpoint condicional

Ahora vamos con los Tracepoints. Es logico usar breakpoints cuando queremos evaluar y analizar algun objeto que tiene muchas propiedades, pero cuando lo único que queremos es saber el valor de una o dos variables, como en este caso, tal vez nos convenga más usar Tracepoints.

Los tracepoints permiten escribir mensajes que incluyan valores de variables, de aspectos del ambiente (como el id del thread en el cual se está ejecutando el código, la fecha/hora actual, etc), y más cosas.

Y esto lo hacen sin siquiera detener la ejecucion del programa. Es decir, podemos crear los tracepoints que queramos, ejecutar el bloque de código que los tiene, y simplemente ir directamente a la ventana de Output para analizar la información que el Tracepoint emitió.

Otra ventaja de usar Tracepoints es que no es necesario modificar nuestro código para imprimir mensajes de debugging.

Para crear un Tracepoint los pasos son los siguientes:

1. Crear un breakpoint en la línea que queremos.

2. Hacer click derecho sobre el breakpoint, y seleccionar la opción de "When Hit".

Tracepoint menu en Visual Studio

Tracepoint menu en Visual Studio

3. Personalizar el mensaje que queremos que el Tracepoint escriba. Para incluir el valor de una variable, simplemente ponemos el nombre de la variable encerrado por un par de llaves {}.

Ventana de Tracepoint - When breakpoint is hit

Ventana de Tracepoint - When breakpoint is hit

4. Aquí tambien podemos especificar si queremos que el debugger se detenga o no. Si el checkbox de la opción "Continue Execution" está seleccionado (está seleccionado por default), el debugger no detendrá la ejecucion y el Tracepoint simplemente emitirá su mensaje a la ventana de Output. De lo contrario, el Tracepoint tambien actuará como un breakpoint normal.

4. Hacer click en OK.

El Breakpoint se convierte en Tracepoint y la tradicional forma circular se vuelve un rombo, como se puede ver.

Forma del tracepoint en Visual Studio

Forma del tracepoint en Visual Studio

Aún mejor, podemos combinar un breakpoint condicional y un tracepoint para solo emitir los mensajes del tracepoint asignándole una condicion. La combinación de ambos se ve de la siguiente manera, y podemos ver que en la ventana de Output, el mensaje que configuré para el Tracepoint solo se emite tres veces: cuando el valor de i es 200, 400 o 600.

Tracepoint y Breakpoint condicional juntos

Tracepoint y Breakpoint condicional juntos

Output de un Tracepoint en Visual Studio

Output de un Tracepoint en Visual Studio

Espero que les haya sido útil.

1 2 Scroll to top