Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas

viernes, 18 de diciembre de 2009

Establecer propiedades del IDE de Visual Studio dependiendo del proyecto que se abre

En el proyecto en el que estoy trabajando tenemos en el Team Foundation un branch con la solución de desarrollo y otro con la misma solución de producción. Considero que es una buena práctica que evita subir código no probado a producción y por ahora nos está llendo bastante bien.

El "problema" es que a veces tenemos que tener ambas soluciones abiertas a la vez, y como los cambios que tienen suelen ser muy pequeños, hay que tener mucho cuidado para no meter la pata y no modificar el código en el branch que no toca.

Comentándolo con mi compañero Pere, se me ocurrió que estaría bien tener un IDE diferente para cada una de las soluciones, algo sencillo, como cambiar el color de fondo o el tipo de letra. Y nos pusimos a buscar cómo hacerlo, gracias a San Google encontramos rápido la solución:

En este post: http://geekswithblogs.net/sdorman/archive/2007/04/25/111981.aspx

se explican 2 formas de hacerlo, una con macros que a mí me pareció un poco complicada y otra bastante más sencilla ejecutando el Visual Studio desde línea de comandos.

Los pasos que hay que seguir:

1 - En el menú Tools - Options dentro Environment - Fonts and Colors, establecemos el tipo de letra y los colores que queramos para, por ejemplo, la solución de desarrollo.

2 - Exportamos los settings desde el menú Tools - Import and Export Settings...

3 - Seleccionamos la opción Export selected enviromment settings, marcamos todos los settings y seleccionamos una ruta para guardar el fichero, por ejemplo: "C:\VSSettings\Desarrollo.vssettings"

Repetimos los pasos con un fondo distinto o un tipo de letra diferente y lo guardamos en "C:\VSSettings\Produccion.vssettings"

4 - Creamos un acceso directo en el escritorio, en el destino seleccionamos el fichero devenv.exe que es el que lanza el Visual Studio (generalmente está en C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE).

5 - Abrimos las propiedades del acceso directo y cambiamos el destino por:

devenv.exe "C:\Mi_Solucion_Desarrollo\MiSolucion.sln" /resetsettings "C:\Vssettings\desarrollo.vssettings"

6 - Creamos otro acceso directo como en el paso 4.

7- Cambimos el destino por:

devenv.exe "C:\Mi_Solucion_Produccion\MiSolucion.sln" /resetsettings "C:\Vssettings\Produccion.vssettings"


Y listo, ya tenemos un acceso directo para que nos abra cada solución con una configuración del IDE de Visual Studio diferente.

Lo cierto es que tarda un poco más en iniciarse ya que tiene que cargar la configuración pero creo que nos evitará muchos dolores de cabeza :)


Happy codding ;)

miércoles, 14 de enero de 2009

He leído: Pro C# 2008 and the .NET 3.5 Platform de Andew Troelsen


Título: Pro C# 2008 and the .NET 3.5 Platform
Autor: Andrew Troelsen
Editorial: Apress
ISBN10: 1-59059-884-9
ISBN13: 978-1-59059-884-9
Páginas: 1370


En la web de Apress
En Amazon


Lo cierto es que no lo he leído en su totalidad, pero es que son más de 1300 páginas y 4 apéndices extra descargables desde la web de la editorial... :S Pero sí que leí las partes que más me interesaban y creo que ya tengo suficientes elementos de juicio para valorar este libro.

Me gustó: Este sí que es un libro realmente completo, abarca prácticamente todo lo que un desarrollador tiene que saber sobre .NET, C# y las novedades que introduce el Framework 3.5 (LINQ, expresiones lambda, tipos anónimos, novedades en WCF, WF, WPF, ASP.NET ...). Además está todo muy bien explicado, con multitud de ejemplos (también se pueden descargar los proyectos de ejemplo de la web de Apress) e imágenes que ayudan a la comprensión.


El tono del libro es bastante ameno y está bien organizado. Antes de cada capítulo el autor hace una pequeña introducción de lo que se tratará, por lo que si no te interesa puedes pasar directamente al siguiente. Y también hay un resumen al final, que está muy bien para aclarar los conceptos del capítulo.

Para que os hagáis una idea de lo completo que es este libro, tiene 2 apéndices, uno sobre interoperabilidad con componentes COM y el otro sobre MONO :o

No me gustó: Ufff, es difícil encontrarle una pega a este libro, está realmente bien y es muy completo ... por decir algo, que es un tocho de más de 1300 páginas y pesa un montón :P Pero bueno, siempre viene bien para hacer un poco de brazo en la oficina o en casa :D

Le falta: que alguien lo traduzca al castellano, porque leerlo en inglés es un poquito duro, pero bueno, ya estamos acostumbrados y el autor no se hace pesado en ningún momento.

Lo recomiendo para: todo el que quiera profundizar en el desarrollo de aplicaciones en .NET con C# y el Framework 3.5, es un gran libro tanto de aprendizaje como para tenerlo de referencia (además, fardas un montón con eso del “Pro C#” :P )

miércoles, 29 de agosto de 2007

Implementar una interface con un solo clic

Hace tiempo prometí explicar cómo se puede implementar una interface con sólo 2 clics, pero me he dado cuenta de que únicamente hace falta 1.

Qué es una interface y qué los dos tipos de implementación que podemos usar lo tenéis muy bien explicado en esta página.
Una vez vista la teória, voy a ir a un ejemplo mucho más práctico para demostrar como funciona otra de las ayudas de Visual Studio 2005. Supongamos que tenemos la siguiente interface:
Una interface muy sencilla con 2 métodos, bien, creamos una clase que la va a implementar:


Si os fijáis, el IDE de Visual Studio hace que aparezca un pequeño rectángulo azul debajo del nombre de la interface (cuando el cursor está sobre antes, después o en medio del nombre de la interface), este rectángulo será el que nos ayude a implementarla.
Vamos a pasar el ratón sobre el rectángulo, y veamos que pasa:


(clic en la imagen para ampliar)

Vaya, se despliega este menú para implementar la interface, hagamos clic en la primera opción:


(clic sobre la imagen para ampliar)

Ya tenemos la interface implementada con tan solo 1 clic. Bueno, falta escribir el código de los métodos, pero en principio ya funcionan (aunque sólo lancen una excepción).

Pero alguno puede pensar, “vaya tontería, esos 2 métodos no me cuesta tanto escribirlos”, y tiene razón, pero
- ¿qué pasa si la interface tiene 200 métodos?
o
- ¿qué pasa si no tenemos documentación sobre los métodos porque es una interface del sistema o de un tercero?
En estos casos el IDE de Visual Studio viene en nuestra ayuda, como hemos visto.

Casi se me olvida, ¿qué pasaría si a la interface le añadiésemos un método?, tal que así:



Pues lo único que tenemos que hacer es volver a realizar los mismos pasos, cursos sobre el nombre de la interface, ratón sobre el rectángulo azul y clic sobre la opción:



(clic en la imagen para ampliar)

sábado, 28 de julio de 2007

Code Snippets (II)

Trasteando con los code snippets

Como vimos en el anterior post, los code snippets ayudan a escribir código, y el Visual Studio incluye una gran cantidad de ellos, vamos a ver cómo encontrarlos.
Seleccionamos Herramientas -> Code Snippets Manager, y nos muestra la siguiente ventana:



Seleccionamos el lenguaje que estemos utilizando, y nos actualiza las categorías que trae por defecto, si os fijáis existe la categoría My Code Snippets para incluir los que creemos.

Bien, vamos a buscar el code snippet que utilizamos en el post anterior:



Si echáis un vistazo a todas las categorías y los code snippets que se incluyen podéis ver que están contempladas muchas acciones comunes, pero ¿qué pasa si no encontramos el code snippet que nos hace falta? Pues aquí tenemos 2 opciones:

- Modificar uno existente para que incluya un cambio o crear uno nuevo a partir de uno existente
- Buscar code snippets que alguien haya creado

Modificar un code snippet existente

Si nos fijamos en la imagen anterior, al seleccionar un code snippet nos muestra dónde está, en este caso el que define una propiedad se encuentra en C:\Archivos de programa\Microsoft Visual Studio 8\Vb\Snippets\1033\common code patterns\properties and procedures\DefineAProperty.snippet.

Con esta ruta podemos ver un par de cosas: que cada code snippet se guarda en un fichero .snippet y las colecciones están agrupadas en directorios, por lo que la agrupación física y la lógica coinciden.

Vamos a modificar este snippet para que el tipo de la propiedad siempre sea string. Abrimos el fichero DefineAProperty.snippet con el Visual Studio (o con el bloc de notas), y podemos observar la estructura de un code snippet sencillo:


<?xml version="1.0" encoding="UTF-8"?>
<CodeSnippets mlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Define a Property</Title>
<Author>Microsoft Corporation</Author>
<Description>Defines a Property with a backing field.</Description>
<Shortcut>Property</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>PropertyName</ID>
<Type>String</Type>
<ToolTip>Replace with property name.</ToolTip>
<Default>NewProperty</Default>
</Literal>
<Literal>
<ID>PropertyType</ID>
<Type>
</Type>
<ToolTip>Replace with the property type.</ToolTip>
<Default>Integer</Default>
</Literal>
<Object>
<ID>PrivateVariable</ID>
<Type>Object</Type>
<ToolTip>Replace this with the private variable name.</ToolTip>
<Default>newPropertyValue</Default>
</Object>
</Declarations>
<Code Language="VB" Kind="method decl">
<![CDATA[
Private $PrivateVariable$ As $PropertyType$
Public Property $PropertyName$() As $PropertyType$
Get
Return $PrivateVariable$
End Get
Set(ByVal value As $PropertyType$)
$PrivateVariable$ = value
End Set
End Property
]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>


Vaya si es XML. ¿Qué más podemos ver?
Que hay una cabecera Header donde poner los datos del creador del code snippet, su descripción y el ShortCut o alias del code snippet.
Que hay un elemento Declarations donde se definen los literales del code snippet (los que se muestran en un cuadrado verde) y se especifica el texto que se debe mostrar cuando se pase el ratón sobre él.
Y que hay un elemento Code, que es donde se está el código que va a aparecer cuando introduzcamos un snippet. Aquí podemos ver los literales que se defienen arriba y se deben reemplazar por el nombre de la variable o el tipo de dato.

Parece fácil, así que vamos a hacer una pequeña modificación para que la propiedad siempre sea de tipo String, para ello tenemos que comentar el literal PropertyType y en el elemento Code poner en su lugar String, algo así:


<?xml version="1.0" encoding="UTF-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Define a string Property</Title>
<Author>bousan</Author>
<Description>Defines a string Property with a backing field.</Description>
<Shortcut>SProperty</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>PropertyName</ID>
<Type>String</Type>
<ToolTip>Replace with property name.</ToolTip>
<Default>NewProperty</Default>
</Literal>
<!--<Literal>
<ID>PropertyType</ID>
<Type>
</Type>
<ToolTip>Replace with the property type.</ToolTip>
<Default>Integer</Default>
</Literal>-->
<Object>
<ID>PrivateVariable</ID>
<Type>Object</Type>
<ToolTip>Replace this with the private variable name.</ToolTip>
<Default>newPropertyValue</Default>
</Object>
</Declarations>
<Code Language="VB" Kind="method decl">
<![CDATA[
Private $PrivateVariable$ As string
Public Property $PropertyName$() As string
Get
Return $PrivateVariable$
End Get
Set(ByVal value As string)
$PrivateVariable$ = value
End Set
End Property
]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>


Como se puede ver, he cambiado el shorcut, la descripción, he comentado el literal PropertyType y lo he sustituido en el elemento Code por string.

Ahora tenemos 2 opciones: guardarlo con en el mismo fichero que estaba, lo cual no es muy recomendable porque no siempre vamos a querer crear propiedades de tipo string, o guardarlo en un fichero diferente, por ejemlplo DefineAStringProperty.snippet, que es lo que vamos a hacer.
Si volvemos al Code Snippet Manager podemos encontrar el snippet que acabamos de crear.

También podemos crear un snippet desde cero y añadirlo a una de las carpetas que ya están registradas por el Code Snippet Manager.


Buscar code snippets

Como yo sé que no soy el único programador del universo siempre que se me plantea un problema, y antes de empezar a devanarme los sesos, busco en Internet si alguien tuvo el mismo problema y ha encontrado una solución. Con los code snippets ocurre lo mismo, hay muchos en diferentes webs que han sido creados por otros programadores que posiblemente se han encontrado en la misma situación que nosotros. Sólo hay que poner "code snippet" en vuestro buscador favorito (el mío es Google, por si alguien lo quiere saber) y tener un poco de suerte.

Una vez que encontremos el snippet que nos hace falta, creamos un fichero .snippet y lo copiamos en él. Si el fichero está en uno de los directorios que están referenciados en el Code Snippet Manager, el nuevo snippet aparecerá en la lista de los existentes. Pero si lo creamos en otro directorio, por ejemplo uno de red para que puedan acceder todos los programadores de un grupo de trabajo, hay que añadir ese directorio al Code Snippet Manager, aunque lo más fácil es mantener la estructura lógica que ya nos presenta Visual Studio.

Casi se me olvida, en MSDN podéis encontrar un editor de Code Snippets en Visual Basic, para no tener que pelearos con el XML.

Y con esto finalizan los posts sobre Code Snippets, por ahora, porque prometo más.

domingo, 22 de julio de 2007

Code snippets (I)

¿Qué son y para qué sirven?

Visual Studio 2005 tiene un par de novedades que hacen que la tarea de escribir código sea un poco menos pesada. Una de estas novedades son los code snippets.

Según MSDN son: "bloques de código reusables orientados a tareas". Vaya definición, así que vamos a poner un ejemplo para que se pueda ver más claro. Si programando en C# tenemos que crear una propiedad dentro de una clase tendremos que escribir algo parecido a esto:


private string _miPropiedad;

public string miPropiedad
{
get
{
return _miPropiedad;
}

set
{
_miPropiedad = value;
}
}


Bien, esto son 19 palabras (sí, las he contado), y unos 150 caracteres, y sólo para una propiedad. Imaginaos si hay que escribir una clase con 50 o 100 propiedades, la cantidad de tiempo que te puede llevar. ¿Y no habrá en algo en Visual Studio para ayudarnos? Pues esto es lo que hacen los code snippets.

Vamos a usar este mismo ejemplo y usar un code snippet para ver lo fácil que es. Escribimos “prop” y el Intellisense (si lo tenemos activado) nos muestra lo siguiente:


Si presionamos TAB, ocurrirá lo siguiente:


Podemos observar que aparece en un rectángulo verde el tipo de variable asociada a la propiedad, el nombre de esa variable y el nombre de la propiedad. Como se puede suponer, al cambiar el tipo de dato de la variable automáticamente se cambia el tipo de dato de la propiedad.
Para movernos entre los diferentes elementos que se pueden cambiar hay que presionar la tecla TAB y para volver al elemento anterior con Shift + TAB, y cuando finalicemos de modificar este código y tengamos la propiedad que deseamos sólo hay que pulsar ENTER para seguir con el resto del código.

Para obtener el primer fragmento de código de este post, tendremos que escribir: string (una sola vez), _miPropiedad, y miPropiedad. En total son 4 palabras y unos 33 caracteres. Vaya cambio, ¿no?

Pues esto es un code snippet, un fragmento de código que se activa con Intellisense mediante un “alias” que tiene cada snippet.

¿Y en VB.NET? Pues es algo parecido, puesto que después de escribir el alias o identificador del code snippet hay que poner un “?”, con lo que tenemos prop? y presionar TAB.

Hay otra forma de insertar un snippet es presionando el botón derecho en la ventana de código y eligiendo la opción de Insertar Snippet, con lo que tenemos:


Además Visual Studio nos permite modificar los snippets existentes o crear unos nuevos, pero eso será tema par otro post.